(n)在SQL查询中的含义?

时间:2018-08-07 10:27:20

标签: mysql sql

SELECT COURSENAME
FROM COURSE C1
WHERE (1) IN
(SELECT COUNT(DISTINCT(C2.COURSEFEES))
FROM COURSE C2
WHERE C2.COURSEFEES > C1.COURSEFEES);

此“ WHERE(1)IN”是什么意思?

3 个答案:

答案 0 :(得分:5)

这是一种尴尬的书写方式:

WHERE (SELECT COUNT(DISTINCT C2.COURSEFEES)
       FROM COURSE C2
       WHERE C2.COURSEFEES > C1.COURSEFEES
      ) = 1

这就是说,课程费用比记录中的大一倍,或者课程费用是第二高的。

将其简化为:

WHERE C1.COURSEFEES = (SELECT C2.COURSEFEES
                       FROM COURSE C2
                       GROUP BY C2.COURSEFEES
                       ORDER BY C2.COURSEFEES DESC
                       LIMIT 1 OFFSET 1
                      )

答案 1 :(得分:3)

(1)中的括号是多余的,因此只能是1 IN ...

1 IN X本质上与X = 1相同。

由于替换X的查询返回一个计数,因此它将检查相关子查询返回的计数是否等于1


此查询是等效的,但改写为X = 1而不是1 IN X

SELECT COURSENAME
FROM COURSE C1
WHERE (
  SELECT COUNT(DISTINCT(C2.COURSEFEES))
  FROM COURSE C2
  WHERE C2.COURSEFEES > C1.COURSEFEES
) = 1;

它将所有课程费用与其他费用进行比较,以仅退还这些费用,这些费用仅比我们目前正在比较的费用大一,因此

count(distinct(..)) = 1 for c2.coursefees > c1.coursefees

答案 2 :(得分:0)

这里(1)与内部查询的结果计数进行比较。

如果下面的内部查询返回1,则外部查询将获取输出,否则不输出。

SomeDTO