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

qco9c6ql  于 2022-11-21  发布在  Mysql
关注(0)|答案(1)|浏览(157)

我有两个表Contractor Users(承包商用户)和Parkings(停车场)。但是,当我们搜索停车场名称时,我们的承包商停车场也会受到此搜索的影响
承包商用户作为cu

| 标识符|姓名|
| - -|- -|
| 一个|汤姆|
| 2个|杰瑞|
| 三个|杰克|

停车场如帕克

| 标识符|姓名|承包商标识|
| - -|- -|- -|
| 一个|停车_a|一个|
| 2个|停车_B|一、三|
| 三个|停车_c|一、二|

在任何搜索之前查询

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

上述查询的结果

| 姓名|用户_停车|
| - -|- -|
| 汤姆|['停车位_a','停车位_b','停车位_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

上述查询的结果

| 姓名|用户_停车|
| - -|- -|
| 汤姆|['停车位_a']|

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

| 姓名|用户_停车|
| - -|- -|
| 汤姆|['停车位_a','停车位_b','停车位_c']|

zzlelutf

zzlelutf1#

在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')

相关问题