为什么此查询会选择每条记录中的两条记录,如何才能选择一条呢?
我不相信它与JSON选择有关,但可能是。
SELECT
note.*,
usr.first_name AS usr_first_name,
usr.last_name AS usr_last_name,
e.data->>('f' || lname.field_id::text) AS entry_last_name,
e.data->>('f' || fname.field_id::text) AS entry_first_name
FROM note
LEFT JOIN usr ON note.usr_id = usr.usr_id
LEFT JOIN entry AS e ON e.entry_id = note.entry_id
LEFT JOIN field AS lname ON (lname.section_id = e.section_id AND lname.type = 'name')
LEFT JOIN field AS fname ON (fname.section_id = e.section_id AND fname.type = 'first_name' AND fname.enabled = 1)
WHERE note.grp_id = 1 AND note.deleted = 0 ORDER BY note.date DESC
LIMIT 20
答案 0 :(得分:2)
很可能你的一个LEFT JOIN
表在右边的每一行都有两行。如果使用SELECT *
进行测试,您应该会看到结果行中的差异(除非您在该表中有完整的重复项,这将是一个问题)。
解决问题的最佳方法取决于问题中未提供的信息。一种方法是加入一个子选择(可能是一个LATERAL
连接),在连接之前折叠重复项,以保证左边的一行。这通常比以后用DISTINCT
删除欺骗更有效。