我有两个表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']|
1条答案
按热度按时间zzlelutf1#
在WHERE子句中添加搜索停放名称筛选器
这是不正确的-您需要在聚合后检查值是否存在,因此条件必须放在HAVING中而不是WHERE中。
例如,测试以下内容: