如何访问select语句中的特定json字段以及count函数?

如何访问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

我试图使用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_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
是否可以为属性列出多个记录?