尝试使用左连接从表中检索某些字段时遇到问题。
表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

答案 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)