SQL-外部联接UNION版本表

时间:2019-02-13 02:18:43

标签: mysql sql join union outer-join

我是sql新手。我有三个表,我想UNION前两个表,然后OUTER JOIN与第三个表的结果,只选择所需的日期。

我已经做过UNION,但是我不知道OUTER JOIN会如何出现。

这些是我的桌子:

TABLE_1

| ID   | Name     |
-------------------
| 1    | John     |
| 2    | Peter    |
TABLE_2

| ID   | Name     |
-------------------
| 3    | Anne     |
| 4    | May      |
TABLE_3

| ID   | Name     | Date       |
--------------------------------
| 2    | Peter    | 2019-02-13 |
| 3    | Anne     | 2019-02-12 |
| 4    | May      | 2019-02-13 |

这是我现在的查询,仅结合了TABLE_1TABLE_2

SELECT ID, Name FROM TABLE_1 UNION SELECT ID, Name FROM TABLE_2

我希望最终结果返回TABLE_1中的日期为TABLE_2的{​​{1}}和TABLE_3的ID和名称。

我希望它看起来像这样:

2019-02-13

2 个答案:

答案 0 :(得分:1)

这里的一种方法是不使用并集查询,而是使用存在子查询来检查前两个表中的每一个TABLE_3记录的存在。

SELECT t3.ID, t3.Name, t3.Date
FROM TABLE_3 t3
WHERE
    t3.Date = '2019-02-13' AND (
    EXISTS (SELECT 1 FROM TABLE_1 t1 WHERE t1.ID = t3.ID) OR
    EXISTS (SELECT 1 FROM TABLE_2 t2 WHERE t2.ID = t3.ID));

答案 1 :(得分:1)

尝试一下

SELECT A.* FROM
(
  SELECT ID, Name FROM TABLE_1 
  UNION
  SELECT ID, Name FROM TABLE_2
 ) AS A
 JOIN TABLE_3
 ON TABLE_3.ID = A.ID AND TABLE_3.DATE = "2019-02-13"

DB Fiddle Here