join - 如何在联合中添加“on”子句?
问题描述
我目前正在成功地联合两张桌子并加入第三张桌子。
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 中获取所有与 table2.id 匹配的数据并合并这些表。
编辑:
table1 (source table) table2 table3
id col1 col2 id col1 col2 id date col4
- 我想要 table2 中的所有记录
- 我想从 table1 中获取 table2.col1 和 table1.id 匹配的记录
- 我想从 table1 获取记录,其中 table3.id 和 table1.id 匹配,其中 date >='2018-12-01'
注:table1 和 table2 完全一样,为什么我选择 union。
解决方案
您的请求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
将删除所有重复项。