left join没有得到预期的数据 - 返回不准确的结果

时间:2017-03-29 05:39:34

标签: mysql

尝试使用左连接从表中检索某些字段时遇到问题。

表1有 - 列reportno,slno和desc 表2包括 - 列报告号,slno和参数

现在我想从table1中检索特定报告no的所有值以及table2中的相应参数。我的预期结果如下所示。 这意味着它应该从表1获得匹配repno的所有行,并通过匹配repno和slno获得参数



/*table2 data*/
repno   slno  parameter 
M100001	2	    TypeRating	
M100001	1	    Type&Rating






select
qc_item_list.i_rep_no,
qc_item_list.slno,
qc_item_list.ITEM_DESC,
qc_insp.parameters
from qc_item_list
left join qc_insp
on qc_item_list.I_REP_NO = qc_insp.I_REP_NO
WHERE qc_item_list.i_rep_no = 'M100001'
ORDER BY qc_item_list.slno




3 个答案:

答案 0 :(得分:3)

您应该加入slno列,而不是 i_rep_no列:

SELECT t1.i_rep_no,
       t1.slno,
       t1.ITEM_DESC,
       COALESCE(t2.parameters, 'NA') AS parameter
FROM qc_item_list t1
LEFT JOIN qc_insp t2
    ON t1.slno     = t2.slno AND
       t1.i_rep_no = t2.i_rep_no
WHERE t1.i_rep_no = 'M100001'
ORDER BY t1.slno

如果您之前从未见过/使用COALESCE(),它的工作方式是使用第一个参数(如果它不是NULL),并使用第二个参数作为备份第一个参数是NULL。在这种情况下,对于第一个表中第二个表中没有匹配slno的记录,参数将显示为NA“不可用”。

答案 1 :(得分:1)

SELECT t1.i_rep_no,
       t1.slno,
       t1.ITEM_DESC,
       COALESCE(t2.parameters, 'NA') AS parameter
FROM qc_item_list t1
LEFT JOIN qc_insp t2
    ON t1.slno = t2.slno and t1.i_rep_no = t2.i_rep_no
WHERE t1.i_rep_no = 'M100001'
ORDER BY t1.slno

添加了一个匹配repno的条件

答案 2 :(得分:-2)

这是左连接的基本示例。

https://www.w3schools.com/sql/sql_join_left.asp

您必须共享表数据和预期输出,而不是可以获得修复SQL的帮助。