gpt4 book ai didi

mysql - 如何在多列上 LEFT JOIN 3 个表

转载 作者:行者123 更新时间:2023-11-29 01:21:49 25 4
gpt4 key购买 nike

我一直被困在这个问题上。我有 3 个表,想要将表 2 和 3 与表 1 的不同列匹配。

tasks:
id | item1_id | item2_id
--------------------------------------------
1 | 4 | 5
2 | 5 | 6
3 | 6 | 7
--------------------------------------------

item1:
id | item1_name
--------------------------------------------
4 | item1_a
5 | item1_b
6 | item1_c
--------------------------------------------

item2:
id | item2_name
--------------------------------------------
5 | item2_a
6 | item2_b
7 | item2_c
--------------------------------------------

我一直在尝试的是:

SELECT tasks.id AS taskID, item1.name AS item1Name, item2.name AS item2Name
FROM tasks LEFT JOIN (item1 CROSS JOIN item2)
ON (tasks.item1_id = item1.id AND tasks.item2_id = item2.id),
users, notes
WHERE users.task_id = tasks.id
AND notes.task_id = tasks.id;

我返回的是任务,但不是来自 item1 或 item2 的信息。

最佳答案

你为什么要做一个cross join?只需执行两个 left join:

SELECT tasks.id AS taskID, item1.name AS item1Name, item2.name AS item2Name
FROM tasks LEFT JOIN
item1
on tasks.item1_id = item1.id LEFT JOIN
item2
on tasks.item2_id = item2.id LEFT JOIN
users
on users.task_id = tasks.id LEFT JOIN
notes
on notes.task_id = tasks.id;

这将保留 tasks 中的所有记录,以及来自其他表的所有匹配字段。

注意:您不应该通过使用 on 子句和 where 子句来混合使用 join 条件。其实规则很简单。为 join 避免使用 where 子句。始终使用 on

关于mysql - 如何在多列上 LEFT JOIN 3 个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19714435/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com