如何 select 数据与数据库的连接而不重复

How to select data with joins from database without duplication

我确实有 returning 正确数据的查询,但我想将其修改为 return 仅来自左侧 tables.

的唯一值
SELECT * FROM XUSER u
LEFT JOIN USER_PRODUCT up ON u.id = up.user_id
LEFT JOIN PRODUCT p ON up.product_id = p.id
WHERE p.id IN (1,2,3...18);

所以你可能怀疑 id=1 的用户是否与产品有多重关系我会多次显示这个用户。

我真的可以使用 DISTINCT,因为我需要来自产品 table 的一些数据,但单一结果就可以了。例如,如果用户与称为书籍和电影的产品有关系,我可以只显示与文本 BOOK 的第一个关系。

order by也是如此。

看来你只需要一个 ROW_NUMBER() 解析函数 -

SELECT * FROM XUSER u
LEFT JOIN USER_PRODUCT up ON u.id = up.user_id
LEFT JOIN (SELECT id, <other required columns>, 
                  ROW_NUMBER() OVER(PARTITION BY id) RN
             FROM PRODUCT) p ON up.product_id = p.id
                            AND RN = 1
WHERE p.id IN (1,2,3...18);

有一种方法可以简化它。我还会在 USER_PRODUCT table 中索引 product_id。我也想知道你在哪里有重复的条目?他们在 USER_PRODUCT 或 PRODUCT table 中吗?

SELECT *
FROM XUSER u
    JOIN
    (
        SELECT user_id, product_id
        FROM USER_PRODUCT up
        GROUP BY user_id, product_id
    ) gp
        ON gp.user_id = u.id
    JOIN PRODUCT p
        ON p.id = gp.product_id
WHERE p.id IN ( 1, 2, 3, 18 );