我有两个桌子
TABLE1
ID T3_ID PERIOD AGENT
1 1 2016 12
2 2 2016 13
3 3 2016 12
4 4 2015 12
和
TABLE2
ID T3_ID PERIOD PRODUCT
1 1 2016 'PRODUCT1'
2 3 2016 'PRODUCT2'
3 3 2015 'PRODUCT2'
我需要从两个表中获取符合特定条件并通过T3_ID字段进行连接的所有行。但是在Table2中没有Table2中与Table1中任何T3_ID记录匹配的行的情况下,无论如何都会显示该行。 在此示例中,预期结果将是:
EXPECTED RESULT
ID T3_ID PERIOD AGENT PRODUCT
1 1 2016 12 'PRODUCT1'
2 2 2016 13 ''
3 3 2016 12 'PRODUCT2'
我已经建立了一个查询,它可以正常工作并显示预期的结果,但是我想知道是否有更好的方法可以做到这一点。
SELECT T1.*, '' AS PRODUCT FROM TABLE1 T1
WHERE T1.PERIOD='2016' AND T1.T3_ID NOT IN (SELECT T2.T3_ID FROM TABLE2 T2 WHERE T2.PERIOD='2016')
UNION
SELECT T1.*, T2.PRODUCT AS PRODUCT FROM TABLE1 T1
LEFT JOIN TABLE2 T2
ON T1.T3_ID=T2.T3_ID
答案 0 :(得分:2)
如果您使用的是SQL Server
SELECT T1.*, ISNULL(T2.PRODUCT,'') AS PRODUCT FROM TABLE1 T1
LEFT JOIN TABLE2 T2
ON T1.T3_ID=T2.T3_ID
WHERE T1.PERIOD='2016'