gpt4 book ai didi

mysql - 如何包含缺少一半连接的记录?

转载 作者:可可西里 更新时间:2023-11-01 07:23:33 26 4
gpt4 key购买 nike

假设我有这样的查询:

SELECT 
s.staffID as staffID,
CONCAT_WS(", ", lname, fname) AS name,
GROUP_CONCAT(unit SEPARATOR ", ") AS units
FROM
staff s,
units u,
staff_units r
WHERE
s.staffID = r.staffID
AND u.unitID = r.unitID
GROUP BY s.staffID
ORDER BY lname

这会得到一个类似这样的列表:

Alice    Accounting
Bob Systems
Charlie Customer Services, Administration

到此为止。现在假设我删除了 staff_units 中将 Alice 记录为 Accounting 成员的条目。运行此查询将生成一个列表,Alice 被排除在外,即使她仍然存在于 staff 表中:

Bob      Systems
Charlie Customer Services, Administration

我能否调整此 SQL,使其继续作为结果返回 Alice,将她显示为未分配到某个单元?

我当然可以运行一个查询来获取员工列表,然后对每个人运行另一个查询来获取当前分配。但这意味着运行 n+1 个查询来构建列表,其中 n 是员 worker 数,这让我很不理解。

最佳答案

您将使用 LEFT JOIN

应用于你的陈述,这将成为

SELECT 
s.staffID as staffID,
CONCAT_WS(", ", lname, fname) AS name,
GROUP_CONCAT(unit SEPARATOR ", ") AS units
FROM
staff s
LEFT OUTER JOIN staff_units r ON s.staffID = r.staffID
LEFT OUTER JOIN units u ON u.unitID = r.unitID
GROUP BY s.staffID
ORDER BY lname

请注意 implicit type of join您正在使用的已被弃用。

关于mysql - 如何包含缺少一半连接的记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8750860/

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