繁体   English   中英

JSON_ARRAYAGG 无法与 WHERE 子句一起正常工作

[英]JSON_ARRAYAGG not working properly with WHERE clause

我有两个表,Contractor Users as cu & Parkings as pak。 但是当我们搜索停车名称时,我们的承包商停车场也会受到此搜索的影响

承包商用户作为 cu

ID 名称
1个 汤姆
2个 杰瑞
3个 杰克

停车场

ID 名称 contractor_ids
1个 停车_a 1个
2个 停车场_b 1,3
3个 停车_c 1,2

在任何搜索之前查询

 SELECT cu.name, JSON_ARRAYAGG(pak.name) as user_parkings 
FROM contractor_users as cu 
LEFT JOIN parkings as pak ON FIND_IN_SET(cu.id, pak.contractor_ids) 
WHERE cu.name IS NOT NULL 
GROUP BY cu.id

以上查询的结果

名称 user_parkings
汤姆 ['parking_a','parking_b', 'parking_c']
杰瑞 ['停车_c']
杰克 ['停车位_b',]

在 WHERE 子句中添加搜索停车名称过滤器

SELECT cu.name, JSON_ARRAYAGG(pak.name) as user_parkings 
FROM contractor_users as cu 
LEFT JOIN parkings as pak ON FIND_IN_SET(cu.id, pak.contractor_ids) 
WHERE cu.name IS NOT NULL AND pak.name = 'parking_a' 
GROUP BY cu.id

以上查询的结果

名称 user_parkings
汤姆 ['停车_a']

所以这是您看到的 user_parkings 列也被过滤的问题,但是添加搜索后我想要的是

名称 user_parkings
汤姆 ['parking_a','parking_b', 'parking_c']

在 WHERE 子句中添加搜索停车名称过滤器

这是不正确的——您需要在聚合后检查值是否存在,因此必须将条件放在 HAVING 中而不是 WHERE 中。

例如,测试这个:

SELECT cu.name, JSON_ARRAYAGG(pak.name) as user_parkings 
FROM contractor_users as cu 
LEFT JOIN parkings as pak ON FIND_IN_SET(cu.id, pak.contractor_ids) 
WHERE cu.name IS NOT NULL  
GROUP BY cu.id
HAVING MAX(pak.name = 'parking_a')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM