SQL - OUTER JOIN a UNION-ed 表
SQL - OUTER JOIN a UNION-ed tables
我是 sql 的新手。我有三个 table,我想 UNION
前两个 table 然后 OUTER JOIN
第三个 table 的结果,只选择一个想要的日期。
我已经完成了 UNION
但我不知道 OUTER JOIN
将如何进来。
这些是我的 tables:
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_1
和 TABLE_2
:
SELECT ID, Name FROM TABLE_1 UNION SELECT ID, Name FROM TABLE_2
我希望最终结果为 return 来自 TABLE_1
和 TABLE_2
的 ID 和名称,其中 TABLE_3
中的日期为 2019-02-13
.
我希望它看起来像这样:
| ID | Name | Date |
--------------------------------
| 2 | Peter | 2019-02-13 |
| 4 | May | 2019-02-13 |
这里的一种方法是不使用联合查询,而是使用存在的子查询来检查前两个表中的任何一个中是否存在每个 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));
试试这个,
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"
我是 sql 的新手。我有三个 table,我想 UNION
前两个 table 然后 OUTER JOIN
第三个 table 的结果,只选择一个想要的日期。
我已经完成了 UNION
但我不知道 OUTER JOIN
将如何进来。
这些是我的 tables:
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_1
和 TABLE_2
:
SELECT ID, Name FROM TABLE_1 UNION SELECT ID, Name FROM TABLE_2
我希望最终结果为 return 来自 TABLE_1
和 TABLE_2
的 ID 和名称,其中 TABLE_3
中的日期为 2019-02-13
.
我希望它看起来像这样:
| ID | Name | Date |
--------------------------------
| 2 | Peter | 2019-02-13 |
| 4 | May | 2019-02-13 |
这里的一种方法是不使用联合查询,而是使用存在的子查询来检查前两个表中的任何一个中是否存在每个 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));
试试这个,
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"