如何访问select语句中的特定json字段以及count函数?
我试图使用count函数访问PostgreSQL中JSON字段的特定部分,以获取状态为alt text is present或not的媒体 包含数据的表格:如何访问select语句中的特定json字段以及count函数?,json,postgresql,left-join,Json,Postgresql,Left Join,我试图使用count函数访问PostgreSQL中JSON字段的特定部分,以获取状态为alt text is present或not的媒体 包含数据的表格: id property_name media_alt 1 abc YES 2 pqr NO 3 xyz YES 4 ddd - 5 eee - 6 fff YES 属性 id cid property_nam
id property_name media_alt
1 abc YES
2 pqr NO
3 xyz YES
4 ddd -
5 eee -
6 fff YES
属性
id cid property_name
1 11 abc
2 11 pqr
3 11 xyz
4 11 ddd
5 11 eee
6 11 fff
id cid property_id media_path details
1 11 1 path1 {"filemeta1":"aa", "media_alt":"media alt text", "filemeta2":"meta2 text"}
2 11 2 path1 {"filemeta1":"aa", "filemeta2":"meta2 text"}
3 11 3 path1 {"filemeta1":"aa", "media_alt":"media alt text2", "filemeta2":"meta2 text"}
4 11 6 path1 {"filemeta1":"aa", "filemeta2":"meta2 text"}
5 11 6 path1 {"filemeta1":"aa", "media_alt":"media alt text2", "filemeta2":"meta2 text"}
营销、媒体和协会
id cid property_name
1 11 abc
2 11 pqr
3 11 xyz
4 11 ddd
5 11 eee
6 11 fff
id cid property_id media_path details
1 11 1 path1 {"filemeta1":"aa", "media_alt":"media alt text", "filemeta2":"meta2 text"}
2 11 2 path1 {"filemeta1":"aa", "filemeta2":"meta2 text"}
3 11 3 path1 {"filemeta1":"aa", "media_alt":"media alt text2", "filemeta2":"meta2 text"}
4 11 6 path1 {"filemeta1":"aa", "filemeta2":"meta2 text"}
5 11 6 path1 {"filemeta1":"aa", "media_alt":"media alt text2", "filemeta2":"meta2 text"}
预期输出:
id property_name media_alt
1 abc YES
2 pqr NO
3 xyz YES
4 ddd -
5 eee -
6 fff YES
我正在尝试执行以下查询,但它没有给我预期的结果
SELECT p.id, p.property_name,
(CASE WHEN COUNT(mma.details->'media_alt' ) > 0 THEN 'YES'
WHEN COUNT(mma.cid) > 0 THEN 'NO'
ELSE '-'
END) as media_alt
FROM properties p
LEFT JOIN marketing_media_associations mma ON ( mma.property_id = p.id AND mma.cid = p.cid )
GROUP BY p.id, p.property_name ORDER BY p.property_name
正确的SQL是什么样子的?您需要使用
IS NULL
条件,而不是count:
(此查询仅对每个酒店的单一营销\媒体\关联案例有效)
marketing\u media\u associations
是否可以为属性列出多个记录?