我正在尝试运行以下 MySQL 查询:
SELECT *
FROM user u
JOIN user_categories uc ON u.user_id = uc.user_id
WHERE (uc.category_id = 3 OR uc.category_id = 1)
它目前返回:
Joe,Smith,60657,male
Joe,Smith,60657,male
Mickey,Mouse,60613,female
Petter,Pan,60625,male
Petter,Pan,60625,male
Donald,Duck,60615,male
如果用户同时属于这两个类别,则当前返回它们两次。如何在不使用 SELECT DISTINCT 的情况下只返回一次用户,而不管他们属于多少个类别?
最佳答案
你需要一个半连接。这可以通过子查询来实现。
SELECT *
FROM user u
WHERE EXISTS(SELECT *
FROM user_categories uc
WHERE u.user_id = uc.user_id AND
uc.category_id IN(1,3))
在 MySQL 中,子查询的性能存在很大问题,但是通过 DISTINCT
或 GROUP BY
进行的 JOIN
和重复消除可能性能更好。
关于mysql - SQL 查询不返回唯一结果。我需要使用哪种类型的联接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5774158/