首页 > 解决方案 > 如何在联合中添加“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
  1. 我想要 table2 中的所有记录
  2. 我想从 table1 中获取 table2.col1 和 table1.id 匹配的记录
  3. 我想从 table1 获取记录,其中 table3.id 和 table1.id 匹配,其中 date >='2018-12-01'

注:table1 和 table2 完全一样,为什么我选择 union。

标签: joinsql-server-2012union

解决方案


您的请求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将删除所有重复项。

一个可运行的 dbfiddle 示例


推荐阅读