mysql - MySQL 中的两步左连接

标签 mysql sql left-join

我正在尝试左连接两个表。表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.IDtb1.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/

相关文章:

php - 使用 PDO 从多个字段进行高级搜索

Python MySQL 连接参数错误

java - 将 MySQL 驱动程序库添加到 NetBeans 项目

mysql - 从 perl bash 创建、分配用户权限并将转储加载到 mysql 会导致 mysql 错误 "no database selected"

php - 在 mySQL select 语句中找到正确的计数语法

mysql - 带有 LEFT JOIN 的 MySQL SELECT 中的空行

php - 我想在 MySQL 数据库中有一列自动计算 DATETIME 差异

c# - EF : Incorrect usage of spatial/fulltext/hash index and explicit index order

python - SQL Alchemy 参数化查询,绑定(bind)表名作为参数给出错误

sql - 使用 LEFT JOIN 的查询不返回计数为 0 的行