Mysql SQL-外部联接联合表

Mysql SQL-外部联接联合表,mysql,sql,join,union,outer-join,Mysql,Sql,Join,Union,Outer Join,我是sql新手。我有三个表,我想联合前两个表,然后外部连接第三个表的结果,并且只选择所需的日期 我已经完成了联合,但我不知道外部连接将如何进入 这些是我的桌子: TABLE_1 | ID | Name | ------------------- | 1 | John | | 2 | Peter | 这是我现在的查询,它只组合了表1和表2: SELECT ID, Name FROM TABLE_1 UNION SELECT ID, Name FROM TA

我是sql新手。我有三个表,我想
联合前两个表,然后
外部连接
第三个表的结果,并且只选择所需的日期

我已经完成了
联合
,但我不知道
外部连接
将如何进入

这些是我的桌子:

TABLE_1

| ID   | Name     |
-------------------
| 1    | John     |
| 2    | Peter    |
这是我现在的查询,它只组合了
表1
表2

SELECT ID, Name FROM TABLE_1 UNION SELECT ID, Name FROM TABLE_2
我希望最终结果从
表1
表2
返回ID和名称,其中
表3
中的日期为
2019-02-13

我希望它看起来像这样:

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

这里的一种方法是不使用联合查询,而是使用exists子查询来检查前两个表中是否存在每个
表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"

我想知道
表3
中的
ID
值与
表1
表2
中的值匹配是故意的还是巧合…@Nick假设我们期望良好的表设计,那么ID匹配是必要的,因为在现实生活中,两个或两个以上的人可能有相同的名字。这是一个相当大的期望,所以!:-)如果为true,那么将名称放在
表3
中有些毫无意义,这意味着它的表设计不好。是的,表没有规范化。也许OP希望有一个基于名字的解决方案,但如果我这样做了,其他人也会评论。不要试图吹毛求疵。根据公认的答案,这将非常有效。
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"