当尝试使用左联接从表中检索某些字段时,我遇到了问题。
表1包含列reportno、slno和desc
表2有-列报告编号、slno和参数
现在,我想从表1中检索特定报表编号的所有值以及表2中的相应参数。我的预期结果如下所示。
这意味着它应该从表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

最佳答案

您应该加入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表示“不可用”

关于mysql - 左联接未获取预期数据-返回不正确的结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43085202/

10-13 02:03