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

JSON_ARRAYAGG与WHERE子句联用异常:筛选车场时丢失用户全关联数据

解决方案

你需要先筛选出关联了目标停车场的用户,再基于这些用户去关联他们所有的停车场数据,而非直接在主查询的WHERE子句中过滤停车场记录。

示例SQL(IN子查询方式)

SELECT 
    cu.id,
    cu.name,
    JSON_ARRAYAGG(pak_all) AS user_parkings
FROM 
    `Contractor Users` cu
-- 子查询先锁定关联了parking_a的用户
WHERE cu.id IN (
    SELECT DISTINCT cu_inner.id
    FROM `Contractor Users` cu_inner
    LEFT JOIN Parkings pak_inner ON FIND_IN_SET(pak_inner.id, cu_inner.parking_ids)
    WHERE pak_inner.name = 'parking_a'
)
-- 关联该用户的所有停车场,聚合完整数据
LEFT JOIN Parkings pak_all ON FIND_IN_SET(pak_all.id, cu.parking_ids)
GROUP BY cu.id, cu.name;

示例SQL(JOIN子查询方式)

如果更倾向于用JOIN逻辑筛选用户,也可以这么写:

SELECT 
    cu.id,
    cu.name,
    JSON_ARRAYAGG(pak_all) AS user_parkings
FROM 
    `Contractor Users` cu
-- 通过子查询筛选出符合条件的用户,再关联主表
JOIN (
    SELECT DISTINCT cu_inner.id
    FROM `Contractor Users` cu_inner
    LEFT JOIN Parkings pak_inner ON FIND_IN_SET(pak_inner.id, cu_inner.parking_ids)
    WHERE pak_inner.name = 'parking_a'
) filtered_users ON cu.id = filtered_users.id
LEFT JOIN Parkings pak_all ON FIND_IN_SET(pak_all.id, cu.parking_ids)
GROUP BY cu.id, cu.name;

逻辑说明

  • 子查询的作用是精准定位所有关联了parking_a的用户ID,确保最终结果只保留这些符合条件的用户。
  • 主查询基于筛选后的用户列表,重新关联他们的全部停车场记录,这样JSON_ARRAYAGG就能聚合用户的所有关联停车场数据,不会被筛选条件截断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 01:45:27