我正在尝试运行以下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)
Run Code Online (Sandbox Code Playgroud)
它目前返回:
Joe,Smith,60657,male
Joe,Smith,60657,male
Mickey,Mouse,60613,female
Petter,Pan,60625,male
Petter,Pan,60625,male
Donald,Duck,60615,male
Run Code Online (Sandbox Code Playgroud)
如果用户属于这两个类别,则它当前将返回两次.如何在不使用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))
Run Code Online (Sandbox Code Playgroud)
在MySQL中,子查询的性能很成问题,但是JOIN通过DISTINCT或者GROUP BY可以执行更好的重复消除.