我正在阅读一些SQL概念并遇到了这个例子:
SELECT *
FROM Employee Emp1
WHERE (1) = (
SELECT COUNT(DISTINCT(Emp2.Salary))
FROM Employee Emp2
WHERE Emp2.Salary > Emp1.Salary
)
这个脚本做什么用?
困扰我的线条:
1) WHERE (1)
这意味着&{39; WHERE
以下查询为TRUE
',但为什么需要这样做?
2) WHERE Emp2.Salary > Emp1.Salary
返回工资高于其自身的行......?
答案 0 :(得分:0)
该脚本返回所有员工行,其中只有一名员工获得更多收入。
答案 1 :(得分:0)
我在下面附上我的答案,以回应你的“混乱线条”。
1)'WHERE(1)' 这意味着'以下查询的位置为TRUE',但为什么需要这样做?
[答案] 当您的内部select语句返回1时,会满足此WHERE
条件,因为它评估1 = 1,实际上意味着WHERE TRUE
。
2)'在哪里Emp2.Salary> Emp1.Salary 返回工资高于其自身的行......?
[答案] 此条件是对整个Employee
表进行的比较。
考虑以下Employee
表的示例数据:
Salary
------
222.55
333.66
第一个SELECT
语句将获取这两个行,然后第二个查询将获取高于当前比较的工资(对于每个)。这意味着它在333.66
函数中有一个值COUNT()
,并且只有一个薪水高于222.55
,因为333.66 is not higher than 333.66
- 所以这一行从结果中被丢弃