我正在尝试运行以下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中,子查询的性能是很有问题的,因此通过
JOIN
或DISTINCT
消除重复可能会更好。关于mysql - SQL查询未返回唯一结果。我需要使用哪种类型的联接?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5774158/