【问题标题】:How does this query work? I am confused in line 1这个查询是如何工作的?我对第 1 行感到困惑
【发布时间】:2016-05-16 12:36:21
【问题描述】:

员工

===========================
|  Employee ID | Salary    |
===========================
|     3         |  200     |
|     4         |   800    |
|     7         |   450    |
============================

查询:

SELECT *
FROM Employee Emp1
WHERE (1) = (          --Line1
             SELECT COUNT(DISTINCT(Emp2.Salary))
             FROM Employee Emp2
             WHERE Emp2.Salary > Emp1.Salary)

上面的查询输出“Employee”表的第二高薪水。 Line1 是如何工作的?我对语法类型不熟悉:

WHERE (1) = 

【问题讨论】:

  • 如果第二次选择的结果等于 1,那么您从 Employee Emp1 获得所有记录,否则不等于 1,那么您不会获得任何数据
  • 它只是倒退了——就像说Where (Select Count(blah) ...) = 1)写它的人可能也写Right Joins一样。
  • 这没什么特别的。大括号可以是omnited。

标签: sql


【解决方案1】:

这样可能更有意义:

SELECT *
FROM Employee Emp1
WHERE 
(SELECT COUNT(DISTINCT(Emp2.Salary))
    FROM Employee Emp2
    WHERE Emp2.Salary > Emp1.Salary)
 = 1

基本上就像你说的那样 - 选择所有薪水第二高的员工。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-29
    • 2015-01-13
    • 1970-01-01
    相关资源
    最近更新 更多