gpt4 book ai didi

具有两个连接的 MySQL 查询

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

我需要在 MySQL 中对三个链接表执行查询。我可以用嵌套查询以懒惰的方式做到这一点,但我无法弄清楚如何用单个查询来做到这一点。

表格是:

Area:-
: id (int)
: name (string)

Consultant:-
:id (int)
:active (1/0)

ConsArea:-
: areaID (int)
: consultantID (int)

我需要遍历所有区域(使用 $area 变量)以便我列出所有区域并针对每个区域指示“活跃”顾问的数量......因此所有区域都必须在其旁边列出一个值(如果没有关联的事件顾问,该值可以为零)

查询的第一部分(无论顾问是否活跃)我可以用:

      SELECT areas.name AS aname, COUNT(consAreas.areaID) AS cct 
FROM areas LEFT OUTER JOIN consAreas
ON consAreas.areaID = areas.id
WHERE areas.areaID = $area
GROUP BY areas.id
ORDER BY areas.name

.. 但是当我想包括顾问活跃的条件时,我无法计算出正确的连接。它仅列出了具有 > 0 个活跃顾问的区域,而我需要所有区域。

      SELECT areas.name AS aname, COUNT(consAreas.area) AS cct 
FROM areas LEFT OUTER JOIN consAreas
ON consAreas.area = areas.id
**JOIN consultants ON consultants.id = consAreas.cons**
WHERE areas.areaID = $area
**AND consultants.active = 1**
GROUP BY areas.id
ORDER BY areas.name

有人帮忙吗?

最佳答案

这是因为mysql的一个行为。左联接之后的内联接使左联接成为内联接。

SELECT areas.name AS aname, COUNT(consultants.id) AS cct 
FROM areas
LEFT JOIN consAreas ON consAreas.area = areas.id
LEFT JOIN consultants ON consultants.id = consAreas.cons AND consultants.active = 1
WHERE
areas.areaID = $area
GROUP BY areas.id
ORDER BY areas.name

在这里你可以看到我只使用左连接,更重要的是直接从左连接 ON 子句中过滤 consultants.active 状态。

关于具有两个连接的 MySQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14613686/

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