mariadb 将查询结果与查询结果中的列表差异进行比较

px9o7tmv  于 7个月前  发布在  其他
关注(0)|答案(1)|浏览(59)

我试图确定哪些学生没有为特定课程检查教科书。我使用MariaDB

SELECT COUNT(*)
FROM `AllRosters2324`
WHERE `Teacher` = 'TeacherName' AND `Period` IN (2,6)

返回此课程两个期间花名册上的66名学生。
接下来,

SELECT `Title`, `Patron Barcode`
FROM `textBooks`
WHERE `Title` = "TextBookTitle" AND 
`Patron Barcode` IN (
SELECT `Student-ID` AS "Patron Barcode"
FROM `AllRosters2324`
WHERE `Teacher` = 'TeacherName' AND `Period` IN (2,6))

返回在这些时段中分配了文本的学生的列表。在这种情况下,名单上的数字是57。因此,9名学生没有指定的文本。

SELECT `Student-ID`
FROM `AllRosters2223`
WHERE `Teacher` = 'TeacherName' AND `Period` IN (2,6)

返回在各个期间注册的66名学生的ID。
我如何编写查询来列出这9个学生ID?

yhuiod9q

yhuiod9q1#

如果在students表和text book表之间使用左(外)联接,则可以确定哪些学生没有链接(因此没有 checkout 相关书籍):

SELECT `Student - ID`
FROM `AllRosters2223` r
LEFT JOIN `textBooks` t ON t.`Title` = 'TextBookTitle'
    AND t.`Patron Barcode` = r.`Student - ID`
WHERE r.`Teacher` = 'TeacherName'
    AND r.`Period` IN (2, 6)
    AND t.`Patron Barcode` IS NULL

外部联接允许student表的所有行都存在于结果中,因此当没有指向教科书表的链接时,引用该表的任何列都将为空。这在where子句中被利用来发现违规学生。
注意表别名的使用(r = roster,t = textbook)

相关问题