[英]Find missing records in ONE-TO-MANY relationship query
我有 3 張桌子:
Class
ID | 班級名稱 |
---|---|
向導 | 1A |
向導 | 2A |
主題
ID | 主題名稱 |
---|---|
向導 | 數學 |
向導 | 傳 |
每個類的主題
ID | 班級號 | 主題 ID | 老師的名字 |
---|---|---|---|
向導 | 向導 | 向導 | 占士邦 |
我希望這些表的工作方式是:
我遇到了一些問題,我查詢了 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
,然后那些外部表Subject
和Class
將join
您的主表。
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.