Sql 使用多列联接获取表1中与表2不匹配的行
嗨,我有这样的问题:Sql 使用多列联接获取表1中与表2不匹配的行,sql,select,join,left-join,Sql,Select,Join,Left Join,嗨,我有这样的问题: SELECT TT2.whs_code, TT2.pdt_code, TT2.fresh_frozen_status, TT2.case_dt_yyyymmdd, TT2.qty_cases, TT2.qty_wt FROM #TempTable2 AS TT2 LEFT OUTER JOIN #TempTable AS TT1 ON TT1.whs_code = TT
SELECT TT2.whs_code,
TT2.pdt_code,
TT2.fresh_frozen_status,
TT2.case_dt_yyyymmdd,
TT2.qty_cases,
TT2.qty_wt
FROM #TempTable2 AS TT2
LEFT OUTER JOIN #TempTable AS TT1
ON TT1.whs_code = TT2.whs_code
AND TT1.pdt_code = TT2.pdt_code
AND TT1.fresh_frozen_status = TT2.fresh_frozen_status
AND TT1.case_dt_yyyymmdd = TT2.case_dt_yyyymmdd
问题是,我想根据
whs_code, pdt_code, fresh_frozen_status, case_dt_yyyymmdd
意思是说一组数据
1115G,FR,20160222
处于#试探性1中,因此如果一组数据显示必须选择
1115G,FR,20160223
,或必须选择1115G,FZ,20160223,或
2115G,FR,20160223
必须选择但我不会使用的1115G,FR,20160222不存在
SELECT TT2.whs_code,
TT2.pdt_code,
TT2.fresh_frozen_status,
TT2.case_dt_yyyymmdd,
TT2.qty_cases,
TT2.qty_wt
FROM #TempTable2 AS TT2
WHERE NOT EXISTS (
SELECT TOP 1 *
FROM #TempTable AS TT1
WHERE tt1.whs_code = tt2.whs_code
AND tt1.pdt_code = tt2.pdt_code
AND TT1.fresh_frozen_status = tt2.fresh_frozen_status
AND TT1.case_dt_yyyymmdd = TT2.case_dt_yyyymmdd
)
你看起来几乎一路都在那里。只需将
其中tt1.fresh\u freezed\u status为NULL
添加到查询中,即可显示T2中不在T1I中的所有行。我需要根据whs\u code、pdt\u code、fresh\u freezed\u status、case\u dt\u yyyymmdd fresh\u freezed\u status的集合进行唯一选择,如您所示,在任何表中,只要将tt2与tt1左连接即可,当tt2记录没有匹配的tt1记录时,tt1.fresh_freezed_status将为空-这就是为什么需要添加“WHERE”子句的原因。如果有可能出现whs_代码、pdt_代码、case_dt_yyyyymmdd也将为空,为什么要使用TOP(1),这是出于性能原因而进行的。基本上,它所做的是找到第一行,然后移到下一行。你可以阅读这篇文章,希望能学到更多。很好,谢谢。