【发布时间】:2021-03-29 20:55:47
【问题描述】:
我有一个表 EMPLOYEE,其中包含以下属性:Name、Ssn、Super_Ssn 其中 Super_Ssn 是主管的 ssn,我要编写以下查询:
检索其上司的上司拥有的所有员工的姓名 “888665555”代表 Ssn。
给定的解决方案:
SELECT
Name
FROM
EMPLOYEE
WHERE
Super_ssn IN ( SELECT SSN FROM EMPLOYEE WHERE SUPER_SSN=‘888665555’ )
虽然我写了以下内容:
SELECT
Name
FROM
EMPLOYEE E,
EMPLOYEE S,
EMPLOYEE SS
WHERE
E.Super_ssn = S.Ssn
AND
S.Super_ssn = SS.Ssn
AND
ss.Ssn=‘888665555’
我的问题如下:
- 如果我有类似的查询,我有什么理由应该诉诸他们给定的方法吗?
- 在不需要时使用嵌套查询有什么好处吗?
【问题讨论】:
-
您自己的解决方案的实际问题 是您使用的是已弃用(而且很糟糕)的旧式 JOIN 语法。您应该使用现代(嗯,“现代”意思是 30 岁)显式 JOIN 语法。 stackoverflow.com/questions/128965/…
-
1) 它们不等价 2) 旧语法。使用
JOIN时,由于 1:m 关系(取决于数据),您可能会得到重复 -
@Dai 我学习了不同类型的连接,但我发现这是最容易编写的,这就是我使用它的原因,感谢您分享该链接
-
@LukaszSzozda 你能指出我自己的解决方案有什么问题吗?
-
@Sergio 我并不是说这是错误的。我指出
JOIN与IN可能会导致不同的结果。一般来说,它们是不等价的。请准备样本数据dbfiddle.uk