[英]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.