我正在尝试左连接两个表。表1(tb1)如下:
DATE_ ID NAME
2007-09 1 Apple
2007-10 2 Pear
2007-11 3 Banana
2007-12 null Cherry
2008-01 11 Kiwi
... ... ...
表 2 (tb2) 如下:
DATE_ ID NAME Sales
2007-09 1 Apple 200
2007-10 2 Pear 100
2007-11 3 Banana 300
2007-12 4 Cherry 500
... ... ... ...
我想首先使用 ID
左连接两个表。对于表 2 中 ID
为 null 的记录,我想使用 name
作为键。
我知道我可以首先在 tb1.ID = tb2.ID
和 tb1.DATE_ = tb2.DATE
上左连接表 1,
使用方法create table my_table select as
创建一个新表,然后再次对新表进行左连接。问题是我在表 1 和表 2 中有数千条记录。即使当我尝试使用 ID
为第一个联接创建新表时,SQL Workbench 也会给出一个错误代码,指出连接丢失。
create view my_view
将解决连接问题。但我想知道如何通过 View 进行两步连接?提前致谢。
最佳答案
您正在寻找这样的东西吗?
SELECT *
FROM table1 t1 LEFT JOIN table2 t2
ON t1.date = t2.date
AND (t1.id = t2.id OR (t1.id IS NULL AND t1.name = t2.name));
示例输出:
+------------+------+--------+------------+------+--------+-------+
| DATE | ID | NAME | DATE | ID | NAME | Sales |
+------------+------+--------+------------+------+--------+-------+
| 2007-09-01 | 1 | Apple | 2007-09-01 | 1 | Apple | 200 |
| 2007-10-01 | 2 | Pear | 2007-10-01 | 2 | Pear | 100 |
| 2007-11-01 | 3 | Banana | 2007-11-01 | 3 | Banana | 300 |
| 2007-12-01 | NULL | Cherry | 2007-12-01 | 4 | Cherry | 500 |
| 2008-01-01 | 11 | Kiwi | NULL | NULL | NULL | NULL |
+------------+------+--------+------------+------+--------+-------+
这是一个dbfiddle演示
关于mysql - MySQL 中的两步左连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44867180/