gpt4 book ai didi

sql - MySQL 5.5 数据库查询帮助

转载 作者:行者123 更新时间:2023-11-29 04:57:51 25 4
gpt4 key购买 nike

我在数据库查询方面遇到了一些问题。

我有两个表,学生(字段:FirstName、LastName、StdSSN)和教师(TFirstName、TLastName、TSSN),我已针对此示例进行了精简。我需要执行一个查询,该查询将返回除本身是教师的学生之外的所有学生。

我有问题

SELECT student.FirstName, student.LastName
FROM `student`,`teachers`
WHERE student.StdSSN=teachers.TSSN

这给了我一个所有同时也是学生的老师的列表,但没有给我一个不是老师的学生的列表,所以我尝试更改为:

SELECT student.FirstName, student.LastName
FROM `student`,`teachers`
WHERE student.StdSSN!=teachers.TSSN

这给了我一个包含许多重复值的所有学生的列表,所以我有点卡在这里。我该如何更改以返回所有非教师学生的列表?我当时在考虑 INNER/OUTER/SELF-JOIN 并尝试了几个小时,但事情变得复杂了,我没有完成任何事情,所以我几乎放弃了。

谁能给我一些建议?我之前确实看过查询,它非常简单,但我在某处失败了。

最佳答案

使用 NOT IN

SELECT s.*
FROM STUDENTS s
WHERE s.stdssn NOT IN (SELECT t.tssn
FROM TEACHERS t)

使用 NOT EXISTS

SELECT s.*
FROM STUDENTS s
WHERE NOT EXISTS (SELECT NULL
FROM TEACHERS t
WHERE t.tssn = s.stdssn)

使用 LEFT JOIN/IS NULL

   SELECT s.*
FROM STUDENTS s
LEFT JOIN TEACHERS t ON t.tssn = s.stdssn
WHERE t.column IS NULL

我对 TEACHERS 中的任何列都使用了“列”,而不是加入的列。

比较:

If the column(s) compared are nullable (value can be NULL), NOT EXISTS is the best choice .否则,LEFT JOIN/IS NULL 是最佳选择(对于 MySQL)。

关于sql - MySQL 5.5 数据库查询帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4855736/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com