SQL查询返回每条记录中的两条

时间:2015-05-13 00:37:00

标签: sql postgresql

为什么此查询会选择每条记录中的两条记录,如何才能选择一条呢?

我不相信它与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

1 个答案:

答案 0 :(得分:2)

很可能你的一个LEFT JOIN表在右边的每一行都有两行。如果使用SELECT *进行测试,您应该会看到结果行中的差异(除非您在该表中有完整的重复项,这将是一个问题)。

解决问题的最佳方法取决于问题中未提供的信息。一种方法是加入一个子选择(可能是一个LATERAL连接),在连接之前折叠重复项,以保证左边的一行。这通常比以后用DISTINCT删除欺骗更有效。