MySQL中的两步左连接
我正试着左键连接两张桌子。表1(tb1)如下所示: 表2(tb2)如下所示: 我想首先使用MySQL中的两步左连接,mysql,sql,left-join,Mysql,Sql,Left Join,我正试着左键连接两张桌子。表1(tb1)如下所示: 表2(tb2)如下所示: 我想首先使用ID左键连接两个表。对于表2中ID为空的记录,我想使用name作为键 我知道我可以先在tb1.ID=tb2.ID和tb1.DATE上加入表1, 使用方法createtable my_table选择ascreatinganewtable,然后为新表再次执行左连接。问题是我在表1和表2中有数千条记录。即使当我试图使用ID为第一个连接创建一个新表时,SQL Workbench也会给我一个错误代码,表示连接丢失 c
ID
左键连接两个表。对于表2中ID
为空的记录,我想使用name
作为键
我知道我可以先在tb1.ID=tb2.ID
和tb1.DATE
上加入表1,
使用方法createtable my_table选择as
creatinganewtable,然后为新表再次执行左连接。问题是我在表1和表2中有数千条记录。即使当我试图使用ID
为第一个连接创建一个新表时,SQL Workbench也会给我一个错误代码,表示连接丢失
create view my_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 |
+------------+------+--------+------------+------+--------+-------+
下面是一个演示发布您的sqlquery@Strawberry想解释一下吗?不,我错了,谢谢。这正是我想要的。
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 |
+------------+------+--------+------------+------+--------+-------+