您好我有一张带有以下记录的“学生”表
INSERT into Student(studId,name)
Values(1,A)
values(2,B)
values(3,C)
values(4,D)
我有一个带有以下记录的“部门”表
INSERT into dept(deptId,Deptname,Emp Id)
Values(D1,Phy,1)
values(D2,Maths,2)
values(D3,Geo,3)
我如何找到不属于任何部门的学生,即在这种情况下,结果应为“D”。 我知道左外连接将返回学生表中的所有记录,但我只想获得1条记录,即学生“D”。
答案 0 :(得分:3)
SELECT *
FROM Student
WHERE studId NOT IN (SELECT EmpId FROM dept)
查找Student.studId
列中尚不存在的所有dept.EmptId
条目作为条目。 (假设我正确读了你的桌子)
理想情况下,你应该突破“学生”和“部门”并创建一个连接表(可能称为)“Student_Department”,它链接每个表的键。
+--------------+ +--------------------+ +--------------+
| Student | | Student_Department | | Dept |
|--------------| |--------------------| |--------------|
| studId | <-----| studId | .-> | deptId |
| name | | deptId | --' | name |
| ... | +--------------------+ | ... |
+--------------+ +--------------+
这使您只需要定义一个学生和部门,但可以将一个学生分配到多个部门,一个部门分配给多个学生,或者任何组合。
答案 1 :(得分:1)
的伪代码:
select *
from students
where id not in(select a.id from students a
inner join department b where b.id in('D1','D2','D3'))
答案 2 :(得分:1)
虽然我同意一些评论者认为这听起来像是一个家庭作业问题,但我会回答一个问题......
我知道左外连接将返回学生表中的所有记录,但我只想获得1条记录,即学生“D”。
好的,假设您运行以下查询:
SELECT * FROM Student
LEFT OUTER JOIN dept ON Student.studId = dept.EmpId
你会得到结果:
studId name deptId deptName EmpId
1 A D1 Phy 1
2 B D2 Maths 2
3 C D3 Geo 3
4 D NULL NULL NULL
您可以在此查询中添加WHERE
子句,仅过滤掉您想要的数据吗? :)
答案 3 :(得分:0)
SELECT s.name
FROM Student s
LEFT JOIN Dept d ON d.empId = s.studId
WHERE d.empId IS NULL