我有两个表
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字段连接。但是,在表 2 中,表 2 中没有与表 1 中的任何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
如果您使用的是 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'