Mysql SQL-外部联接联合表
我是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
联合前两个表,然后外部连接
第三个表的结果,并且只选择所需的日期
我已经完成了联合
,但我不知道外部连接
将如何进入
这些是我的桌子:
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"