我正在构建一个SQL查询 1)创建一个group_concat,如果值不为null,则返回json 2)将一个表(句柄)连接到两个不同的表。
我在查询时遇到两个问题
1)当我得到'应该'失败并且返回0行的结果时,我得到一行,其中所有字段都为空
2)当我有一个没有活动的scene
时,我最终得到一个JSON_OBJECT
,其中所有字段都为空
SELECT h.name as name, s.*,
GROUP_CONCAT(JSON_OBJECT(
'activityId', a.id,
'name', ah.name,
'settings', a.settings,
) SEPARATOR ',') as activities
FROM scene AS s
INNER JOIN user AS h ON s.uid = h.id
LEFT JOIN scene_activities AS sa ON sa.sid = s.id
LEFT JOIN activity AS a ON sa.aid = a.id
LEFT JOIN user AS ah ON a.uid = ah.id
WHERE s.scene_id = ?
如何设置上述字段,以便不返回Scene
的空集或JSON_OBJECT
的空集为空。
答案 0 :(得分:1)
如果您要求json中的所有属性都具有非空值,请不要使用left
连接(如果没有匹配的行,则返回空值)并在其上添加条件连接行中的值也是:
SELECT h.name as name, s.*,
GROUP_CONCAT(JSON_OBJECT(
'activityId', a.id,
'name', ah.name,
'settings', a.settings,
) SEPARATOR ',') as activities
FROM scene AS s
JOIN user AS h ON s.uid = h.id
JOIN scene_activities AS sa ON sa.sid = s.id
JOIN activity AS a ON sa.aid = a.id
and a.settings is not null
JOIN user AS ah ON a.uid = ah.id
and ah.name is not null
WHERE s.scene_id = ?