You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

左连接查询无法显示无对应外键的组织卡片数问题求助

嘿,这个问题我熟!咱们来一步步解决它。

首先,你的查询之所以只返回有活跃卡片的组织,问题出在WHERE子句里的boc.is_active = true条件。因为你用的是左连接,那些没有对应卡片的组织在bus_operator_cards表的所有字段都是NULL,而NULL = true的判断结果是不成立的,所以这些行直接被WHERE过滤掉了,自然看不到它们。

那怎么改呢?需要做两个关键调整:

  1. 把boc.is_active = true移到左连接的ON子句中:
    这样做的话,左连接只会关联那些活跃的卡片记录,而不会因为这个条件过滤掉没有卡片的组织——这些组织依然会留在结果集里,只是bus_operator_cards相关的字段都是NULL。

  2. 替换IFNULL为条件判断:
    COUNT(bus_operator_card_id)在没有匹配行的时候返回的是0而不是NULL,所以IFNULL根本不会触发。咱们需要用CASE语句或者IF函数来判断计数是否为0,从而显示你想要的"--"。

最后,为了符合SQL标准(避免ONLY_FULL_GROUP_BY模式下的报错),最好把organisation_name也加入到GROUP BY子句里。

修改后的完整SQL语句如下:

SELECT 
    o.organisation_id, 
    organisation_name, 
    CASE WHEN COUNT(boc.bus_operator_card_id) = 0 THEN "--" ELSE COUNT(boc.bus_operator_card_id) END AS num_cards 
FROM `organisation` o 
LEFT OUTER JOIN `bus_operator_cards` boc 
    ON o.organisation_id = boc.organisation_id 
    AND boc.is_active = true 
WHERE o.org_type_id =5 
GROUP BY o.organisation_id, organisation_name 
ORDER BY o.organisation_id DESC;

这样执行后,就能得到你期望的结果:既有带活跃卡片的组织,也有无卡片的组织(num_cards显示"--")。

内容的提问来源于stack exchange,提问作者Wells

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 17:12:39