在条件下获取两个表中的重合行和不重合行

  • 本文关键字:两个 获取 条件下 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字段连接。但是,在表 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'

最新更新