Select 查询给出两个相同的结果

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

我有以下SQL查询,但遇到了一个问题: 当我执行它时,我从“products”表中的“sn”列中得到了两个相同的序列号

编辑:

贷款表:

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, \'%\')