mysql—sql查询中(n)的含义是什么?

0kjbasz6  于 2021-06-23  发布在  Mysql
关注(0)|答案(3)|浏览(341)
  1. SELECT COURSENAME
  2. FROM COURSE C1
  3. WHERE (1) IN
  4. (SELECT COUNT(DISTINCT(C2.COURSEFEES))
  5. FROM COURSE C2
  6. WHERE C2.COURSEFEES > C1.COURSEFEES);

“where(1)in”是什么意思?

ldxq2e6h

ldxq2e6h1#

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

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

这就是说,有一门课程的学费比记录中的要高——或者说,这门课程的学费是第二大的。
更简单的做法是:

  1. WHERE C1.COURSEFEES = (SELECT C2.COURSEFEES
  2. FROM COURSE C2
  3. GROUP BY C2.COURSEFEES
  4. ORDER BY C2.COURSEFEES DESC
  5. LIMIT 1 OFFSET 1
  6. )
qcuzuvrc

qcuzuvrc2#

这里(1)与内部查询的结果计数进行比较。
如果下面的内部查询返回一个1,那么外部查询将获取输出,否则没有输出。

  1. (SELECT COUNT(DISTINCT(C2.COURSEFEES))
  2. FROM COURSE C2
  3. WHERE C2.COURSEFEES > C1.COURSEFEES)
egdjgwm8

egdjgwm83#

括号 (1) 是多余的,所以只能是 1 IN ... . 1 IN X 本质上与 X = 1 .
因为 X 返回一个计数,它检查相关子查询返回的计数是否等于1
此查询是等效的,但重写为 X = 1 而不是 1 IN X :

  1. SELECT COURSENAME
  2. FROM COURSE C1
  3. WHERE (
  4. SELECT COUNT(DISTINCT(C2.COURSEFEES))
  5. FROM COURSE C2
  6. WHERE C2.COURSEFEES > C1.COURSEFEES
  7. ) = 1;

它将每个课程费用与其他费用进行比较,只返回这些费用,这些费用只比我们目前比较的费用大一倍,因此

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

相关问题