如何在mysql中获得两个查询的交集

e.h*_*did 0 mysql database

我有一个表,它有两列,其中包含来自两个不同表的两个外键。

这是我的关系表:

桌子

我想选择那些可以说 id 3 和 4 两种语言的学生。

我如何写一个查询给我前 12 、 14

100*_*111 5

你可以试一试:

SELECT 
 student_id,
 COUNT(*) total
FROM your_table 
WHERE language_id IN (3,4)
GROUP BY student_id
HAVING COUNT(*) = 2;
Run Code Online (Sandbox Code Playgroud)

OnlyIN不能确保学生同时参与语言 id 3 & 4

您需要使用GROUP BY student_id HAVING COUNT(*) = 2以确保那些student_ids 参与到结果中language id 3 & 4


另一种解决方案是使用INNER JOIN. 但它没有规模。

SELECT 
A.student_id 
FROM your_table A 
INNER JOIN your_table B ON A.student_id = B.student_id 
  AND A.language_id = 3 AND B.language_id = 4
Run Code Online (Sandbox Code Playgroud)