如何在联合中添加“ on”子句?

时间:2018-12-20 16:06:21

标签: join sql-server-2012 union

我目前正在成功地合并两个表并加入第三个表。

select col1,col2
from table1

union 

select col1,col2
from table2

join(select distinct(id), date from table3) on table3.id = table2.id

我怎么只合并table1和table2,其中table1.col3在table2.id中?

换句话说,如果table1.col3中有一个值,我想从table2.id匹配的table2中获取所有数据,并合并表。

编辑:

table1 (source table)      table2                  table3
id  col1  col2             id col1 col2            id date  col4
  1. 我想要table2中的所有记录
  2. 我想从table1获取记录,其中table2.col1和table1.id之间匹配
  3. 我想从table1获取记录,其中table3.id和table1.id在日期> ='2018-12-01'

注意:table1和table2完全相同,所以我选择并集。

1 个答案:

答案 0 :(得分:2)

您请求的UNION实际上使查询相当简单,因为它可以根据您的需求通​​过3个独立的简单查询来构建;

SELECT col1, col2 FROM table2
 UNION ALL
SELECT col1, col2 FROM table1 WHERE id IN (SELECT col1 FROM table2)
 UNION ALL
SELECT col1, col2 FROM table1 WHERE id IN (SELECT id FROM table3 WHERE date >= '2018-12-01')

请注意,UNION ALL允许重复(每次查询可能单行显示一次),而更改为UNION将删除所有重复项。

A runnable dbfiddle example