我正在尝试运行以下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中,子查询的性能是很有问题的,因此通过JOINDISTINCT消除重复可能会更好。

关于mysql - SQL查询未返回唯一结果。我需要使用哪种类型的联接?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5774158/

10-11 01:33