相交MySql
我正在尝试获取几个SQL请求的交集。我试过很多命令,但还是卡住了 以下是三个请求 有人有办法帮我吗 一, 二, 三,相交MySql,mysql,sql,Mysql,Sql,我正在尝试获取几个SQL请求的交集。我试过很多命令,但还是卡住了 以下是三个请求 有人有办法帮我吗 一, 二, 三, 可以使用联接轻松重写INTERSECT: SELECT t1.username from ( SELECT username FROM mdl_user INNER JOIN mdl_quiz_grades ON mdl_user.id=mdl_quiz_grades.userid WHERE mdl_quiz_grades.quiz = 17
可以使用联接轻松重写INTERSECT:
SELECT t1.username
from
(
SELECT username
FROM mdl_user
INNER JOIN mdl_quiz_grades
ON mdl_user.id=mdl_quiz_grades.userid
WHERE mdl_quiz_grades.quiz = 17
) as t1
join
(
SELECT username
FROM mdl_user
INNER JOIN mdl_quiz_grades
ON mdl_user.id=mdl_quiz_grades.userid
WHERE mdl_quiz_grades.quiz = 16
) as t
on t1.username = t2.username
join
(
SELECT username
FROM mdl_user
INNER JOIN mdl_quiz_grades
ON mdl_user.id=mdl_quiz_grades.userid
WHERE mdl_quiz_grades.quiz = 15
) as t3
on t1.username = t3.username
但在您的例子中,它几乎是相同的查询,只是不同的WHERE条件。您可以应用聚合逻辑:
SELECT username
FROM mdl_user
INNER JOIN mdl_quiz_grades
ON mdl_user.id=mdl_quiz_grades.userid
WHERE mdl_quiz_grades.quiz in (15,16,17)
GROUP BY username
HAVING COUNT(*) = 3
如果同一用户ID可能多次进行相同的测验,则需要应用DISTINCT:
HAVING COUNT(DISTINCT quiz) = 3
考虑提供一些样本数据和预期结果。
SELECT t1.username
from
(
SELECT username
FROM mdl_user
INNER JOIN mdl_quiz_grades
ON mdl_user.id=mdl_quiz_grades.userid
WHERE mdl_quiz_grades.quiz = 17
) as t1
join
(
SELECT username
FROM mdl_user
INNER JOIN mdl_quiz_grades
ON mdl_user.id=mdl_quiz_grades.userid
WHERE mdl_quiz_grades.quiz = 16
) as t
on t1.username = t2.username
join
(
SELECT username
FROM mdl_user
INNER JOIN mdl_quiz_grades
ON mdl_user.id=mdl_quiz_grades.userid
WHERE mdl_quiz_grades.quiz = 15
) as t3
on t1.username = t3.username
SELECT username
FROM mdl_user
INNER JOIN mdl_quiz_grades
ON mdl_user.id=mdl_quiz_grades.userid
WHERE mdl_quiz_grades.quiz in (15,16,17)
GROUP BY username
HAVING COUNT(*) = 3
HAVING COUNT(DISTINCT quiz) = 3