Select 查询给出两个相同的结果
我有以下SQL查询,但遇到了一个问题: 当我执行它时,我从“products”表中的“sn”列中得到了两个相同的序列号 编辑: 贷款表:Select 查询给出两个相同的结果,select,join,mysqli,Select,Join,Mysqli,我有以下SQL查询,但遇到了一个问题: 当我执行它时,我从“products”表中的“sn”列中得到了两个相同的序列号 编辑: 贷款表: user_id product_id 1 1 1 2 2 3 规格表: productname year type sn name1 2012 1 1234 name2 2011
user_id product_id
1 1
1 2
2 3
规格表:
productname year type sn
name1 2012 1 1234
name2 2011 2 4321
name3 2010 3 3241
产品表:
id sn
1 AAAAAAAA1234
2 BBBBBBBB4321
3 CCCCCCCC3241
编辑2:
SELECT products.id,
specifications.productname,
products.sn,
specifications.year,
lendings.lending_date
FROM products
INNER JOIN lendings ON products.id = lendings.product_id
INNER JOIN specifications ON products2.sn LIKE CONCAT(specifications.sn, \'%\') OR products.type = specifications.type
WHERE lendings.user_id = ?
通常,这意味着您的一个联接中没有所有必需的联接列,您将得到一个新的联接。在数据库术语中,这意味着您要连接到一个表,并希望连接到一行,但多行符合条件,因此实际上要连接到多行。发生这种情况时,您将在结果中多次获得同一行(示例中为product行) 如果您发布了一些测试数据,这样就可以确认这个场景,这会更好,但是由于您没有这样做,我建议您检查每个连接,以确保没有为给定的products行返回多行 我发现你的问题中有一部分特别可疑,那就是这个连接:
INNER JOIN specifications ON products.sn LIKE CONCAT(\'%\', specifications.sn, \'%\') OR products.type LIKE CONCAT(\'%\', specifications.type, \'%\')
您正在使用类似于的
运算符加入,该运算符似乎很有可能获得多行。您的一个加入条件太松弛
例如,指向同一产品的两条借出记录。这是因为规格表仅包含部分序列号。但如果它连接到多个规格行,即使规格仅包含部分序列号,也会弄乱结果。如果您可以发布完整的数据示例,这将非常有帮助。是否可以比较specifications.sn和products.sn中仅有的4个数字?有时它只是最后3个,也可能是类型号。根据产品的不同,这有点棘手:(如果它们是最后4个字符,您可以使用子字符串函数。请参见此处:这是不同的。我是否可以在查询中进行检查,如果它是11个字符,那么它是3个字母。如果是12个,那么它是4个字母。
INNER JOIN specifications ON products.sn LIKE CONCAT(\'%\', specifications.sn, \'%\') OR products.type LIKE CONCAT(\'%\', specifications.type, \'%\')