在条件下获取两个表中的一致行和非一致行

时间:2018-06-28 14:05:27

标签: sql

我有两个桌子

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

1 个答案:

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