gpt4 book ai didi

MySQL:如果其中一个返回 NULL,则 INNER JOIN 会使 2 个 LEFT JOIN 崩溃

转载 作者:行者123 更新时间:2023-11-29 13:51:35 24 4
gpt4 key购买 nike

查询中:

SELECT
i.id, i.title, i.description,
cities.name as city,
GROUP_CONCAT(DISTINCT station.name) as station,
GROUP_CONCAT(DISTINCT p.url) as photos
FROM
items i
INNER JOIN
cities ON cities.id = i.city_id
LEFT JOIN
item_photos p ON p.item_id = i.id
LEFT JOIN
item_stations s ON s.item_id = i.id
INNER JOIN
stations ON stations.id = s.station_id
WHERE i.id = ?
LIMIT 1

如果表 item_stations 中的行不存在,则两个 LEFT JOIN 均有效:返回照片,对于电台则返回 NULL。但在这种情况下使用 INNER JOIN 查询将为照片和电台返回 NULL。如果 item_stations 中没有使用 s.item_id = i.id 所需的行,我应该如何重写查询以表示 INNER JOIN 不连接表?

最佳答案

如果您确实需要在 item_stationsstations 表之间进行 INNER JOIN,那么您可能需要考虑在子查询中使用 INNER JOIN:

SELECT
i.id, i.title, i.description,
cities.name as city,
GROUP_CONCAT(DISTINCT s.name) as station,
GROUP_CONCAT(DISTINCT p.url) as photos
FROM items i
INNER JOIN cities
ON cities.id = i.city_id
LEFT JOIN item_photos p
ON p.item_id = i.id
LEFT JOIN
(
select item_id, name
from item_stations s
INNER JOIN stations
ON stations.id = s.station_id
)
ON s.item_id = i.id
WHERE i.id = ?
LIMIT 1

否则我建议在两者之间使用 LEFT JOIN:

SELECT
i.id, i.title, i.description,
cities.name as city,
GROUP_CONCAT(DISTINCT stations.name) as station,
GROUP_CONCAT(DISTINCT p.url) as photos
FROM items i
INNER JOIN cities
ON cities.id = i.city_id
LEFT JOIN item_photos p
ON p.item_id = i.id
LEFT JOIN item_stations s
ON s.item_id = i.id
LEFT JOIN stations
ON stations.id = s.station_id
WHERE i.id = ?
LIMIT 1

关于MySQL:如果其中一个返回 NULL,则 INNER JOIN 会使 2 个 LEFT JOIN 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16617811/

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