PostgreSQL查询返回重复记录

时间:2019-05-07 09:09:31

标签: sql postgresql

我有这个查询:

    SELECT  DISTINCT ON (users.id)
        users.id,
        users.name,
        users.email,
        users.phone,
        users.sub,
        sup.title,
        COUNT(customers.id)
    FROM  users                             
    LEFT JOIN customers ON users.id = customers.user_id
    LEFT JOIN sup_users ON users.id = sup_users.user_id
    LEFT JOIN sup ON sup.id = sup_users.sup_id
    GROUP BY users.id, users.name, users.email, users.phone, users.sub, sup.title

sup_users具有以下结构:

    Column      |  Type   | Collation | Nullable |                  Default                   | Storage | Stats target | Description 
    -------------+---------+-----------+----------+--------------------------------------------+---------+--------------+-------------
    id          | integer |           | not null | nextval('sup_users_id_seq'::regclass)      | plain   |              | 
    sup_id      | integer |           | not null |                                            | plain   |              | 
    user_id     | integer |           | not null |                                            | plain   |              | 

如果它包含多个记录,其中有一个user_id而一个以上的sup_id,则我的查询包含重复的记录。

我可以将查询更改为SELECT DISTINCT,但是想知道是否有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

这是您想要的吗?

SELECT u.*,
       (SELECT COUNT(*)
        FROM customers c
        WHERE u.id = c.user_id
       ) as num_customers
FROM users u ;

我不明白为什么您要加入未明确引用的表。

答案 1 :(得分:0)

这是我最后遇到的查询:

<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>