SELECT COURSENAMEFROM COURSE C1WHERE (1) IN(SELECT COUNT(DISTINCT(C2.COURSEFEES))FROM COURSE C2WHERE C2.COURSEFEES > C1.COURSEFEES);
SELECT COURSENAME
FROM COURSE C1
WHERE (1) IN
(SELECT COUNT(DISTINCT(C2.COURSEFEES))
FROM COURSE C2
WHERE C2.COURSEFEES > C1.COURSEFEES);
“where(1)in”是什么意思?
ldxq2e6h1#
这是一种尴尬的写作方式:
WHERE (SELECT COUNT(DISTINCT C2.COURSEFEES) FROM COURSE C2 WHERE C2.COURSEFEES > C1.COURSEFEES ) = 1
WHERE (SELECT COUNT(DISTINCT C2.COURSEFEES)
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 )
WHERE C1.COURSEFEES = (SELECT C2.COURSEFEES
GROUP BY C2.COURSEFEES
ORDER BY C2.COURSEFEES DESC
LIMIT 1 OFFSET 1
)
qcuzuvrc2#
这里(1)与内部查询的结果计数进行比较。如果下面的内部查询返回一个1,那么外部查询将获取输出,否则没有输出。
(SELECT COUNT(DISTINCT(C2.COURSEFEES))FROM COURSE C2WHERE C2.COURSEFEES > C1.COURSEFEES)
WHERE C2.COURSEFEES > C1.COURSEFEES)
egdjgwm83#
括号 (1) 是多余的,所以只能是 1 IN ... . 1 IN X 本质上与 X = 1 .因为 X 返回一个计数,它检查相关子查询返回的计数是否等于1此查询是等效的,但重写为 X = 1 而不是 1 IN X :
(1)
1 IN ...
1 IN X
X = 1
X
SELECT COURSENAMEFROM COURSE C1WHERE ( SELECT COUNT(DISTINCT(C2.COURSEFEES)) FROM COURSE C2 WHERE C2.COURSEFEES > C1.COURSEFEES) = 1;
WHERE (
SELECT COUNT(DISTINCT(C2.COURSEFEES))
) = 1;
它将每个课程费用与其他费用进行比较,只返回这些费用,这些费用只比我们目前比较的费用大一倍,因此
count(distinct(..)) = 1 for c2.coursefees > c1.coursefees
3条答案
按热度按时间ldxq2e6h1#
这是一种尴尬的写作方式:
这就是说,有一门课程的学费比记录中的要高——或者说,这门课程的学费是第二大的。
更简单的做法是:
qcuzuvrc2#
这里(1)与内部查询的结果计数进行比较。
如果下面的内部查询返回一个1,那么外部查询将获取输出,否则没有输出。
egdjgwm83#
括号
(1)
是多余的,所以只能是1 IN ...
.1 IN X
本质上与X = 1
.因为
X
返回一个计数,它检查相关子查询返回的计数是否等于1此查询是等效的,但重写为
X = 1
而不是1 IN X
:它将每个课程费用与其他费用进行比较,只返回这些费用,这些费用只比我们目前比较的费用大一倍,因此