Mysql

給定一個包含班級和學生的表,需要找到學生的差異

  • December 29, 2021

我有 class_students 表,給定 2 個班級 ID,我需要找到學生的差異。這是我使用的 sql fiddle, http ://sqlfiddle.com/#!9/dba48e/11 這裡有任何幫助。

您可以使用NOT IN而不是 MINUS 運算符來獲得預期的結果,因為 MySQL 沒有 MINUS 運算符。

SELECT a.student_id
FROM `class_students` a 
WHERE a.class_id = '1' 
AND a.student_id NOT IN (
   SELECT b.student_id
   FROM `class_students` b 
   WHERE b.class_id = '2'
)

在 db<>fiddle 上找到工作展示

LEFT JOIN用作

SELECT a.student_id
FROM `class_students` a 
LEFT JOIN `class_students` b ON b.student_id = a.student_id AND b.class_id = '2'
WHERE a.class_id = '1' AND b.student_id IS NULL

db<>fiddle 上的工作展示

使用,例如

SELECT student_id
FROM class_students
GROUP BY student_id
HAVING SUM(class_id = 1) &gt; 0
  AND SUM(class_id != 1) = 0

更多資訊是

SELECT student_id, GROUP_CONCAT(DISTINCT class_id) classes_in
FROM class_students
GROUP BY student_id
HAVING COUNT(DISTINCT class_id) &lt; ( SELECT COUNT(DISTINCT class_id)
                                   FROM class_students )

PS。建議 - 定義(class_id, student_id)(或按後向欄位順序)作為唯一/主索引 - 它將禁止重複記錄。

引用自:https://dba.stackexchange.com/questions/244289