簡體   English   中英

在一對多關系查詢中查找缺失的記錄

[英]Find missing records in ONE-TO-MANY relationship query

我有 3 張桌子:

Class

ID 班級名稱
向導 1A
向導 2A

主題

ID 主題名稱
向導 數學
向導

每個類的主題

ID 班級號 主題 ID 老師的名字
向導 向導 向導 占士邦

我希望這些表的工作方式是:

  • 表 Class 中將有 10 個類。
  • 表主題中將有 10 個主題。
  • 每個 class 將有 10 個科目,對於 10 個班級,將有 100 條記錄。

我遇到了一些問題,我查詢了 SubjectOfEachClass 表,只有 95 條記錄。 我用來查找缺失主題的查詢命令是:

SELECT *
FROM Subject s
JOIN (
    SELECT *
    FROM SubjectOfEachClass
    WHERE ClassId = 'guid'
) AS sc ON s.Id = sc.SubjectId

我多次更換ClassId,直到我發現錯過了一些主題的class。

我認為這種查詢方式根本沒有效率。 如果我有 100 個科目和 100 個班級,我就沒有機會找到缺失的科目。

嘗試這個:

SELECT c.id AS classId,
       count(sc.id) AS countOfSubjects
FROM SubjectOfEachClass AS sc
INNER JOIN Classes AS c ON c.id = sc.classId
GROUP BY c.id
ORDER BY countOfSubjects

異常值將浮動。

您的主表應該是SubjectOfEachClass ,然后那些外部表SubjectClassjoin您的主表。

select *
from SubjectOfEachClass sc
inner join Subject s on s.guid=sc.guid
inner join Class c on c.guid=sc.guid
where sc.ClassId = 'guid'

查找所有課程中所有缺失的科目:

select c.id, c.classname , s.id , s.SubjectName
from class c
cross apply Subject s
where not exists (
   select 1 from SubjectOfEachClass sc 
   where sc.classid = c.id and sc.subjectid = s.id
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM