SELECT COURSENAME
FROM COURSE C1
WHERE (1) IN
(SELECT COUNT(DISTINCT(C2.COURSEFEES))
FROM COURSE C2
WHERE C2.COURSEFEES > C1.COURSEFEES);
此“ WHERE(1)IN”是什么意思?
答案 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