为了实现下述代码,首先得有数据库和相应的表格,本文用的是https://blog.csdn.net/qaz13177_58_/article/details/5575711/中的案例,即先用链接中那些命令创建数据库、生成数据表,然后就有了student,teacher,course,score等表。

最近用select做题,经常碰到下面的这两个错误:

1.子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。

比如针对下述问题:

1.查询成绩比该课程平均成绩低的同学的成绩表。

我的查询:select * from score where degree<(select avg(degree) from score group by cno),执行后,出现上述错误。

正确查询:SELECT A.* FROM SCORE A WHERE DEGREE<(SELECT AVG(DEGREE) FROM SCORE B WHERE A.CNO=B.CNO)

2.查询出“计算机系“教师所教课程的成绩表。

我的查询:select * from score where cno=
(select course.cno from course where tno=(select tno from TEACHER where teacher.depart='计算机系')),执行后,出现上述错误。

正确查询:select * from score where cno IN

(select course.cno from course INNER JOIN TEACHER ON TEACHER.TNO=COURSE.TNO AND teacher.depart='计算机系')

上述问题2在于用了'='于select子查询(我的查询的第二行括号内语句)之前,但是select子查询返回的不止一个元素,所以出错了。

如果问题改一改,变为:查询出“李诚“教师所教课程的成绩表。那么我们可以用'='构成的嵌套查询语句如下:

select * from score where cno=
(select course.cno from course where tno=(select tno from TEACHER where teacher.depart='李诚'))

为什么这时候可以执行而且得到想要的结果了?这是因为select tno from TEACHER where teacher.depart='李诚'只返回'804'这个tno值,而且select course.cno from course where tno='804'也只返回'3-245'这个cno值,第二行中的两个嵌套子查询都只返回一个值,因此上述语句中的两个'='不会出错。

2.HAVING 子句中的列 'score.DEGREE' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。

比如针对下述问题:

查询最低分大于70,最高分小于90的Sno列。

我的查询:select sno from score group by sno having degree between 70 and 90,执行后,出现上述错误。

正确查询:select sno from score group by sno having min(degree)>70 and max(degree)<90

分析,having 后面应该是跟聚合函数的表达式的,直接跟按某一列的行筛选语句会无效。

“子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。”SQL查询错误解析的更多相关文章

  1. Sql中联合查询中的”子查询返回的值不止一个“的问题

    在子查询中,如果想实现如下的功能: select lib,count(*),select sum(newsNo) from Table1 group by lib from Tabel1 T1,Tab ...

  2. SQL server 查询出现:---“子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。”SQL查询错误解析---

    最近用select进行数据筛选,碰到下面的这个错误: ---子查询返回的值不止一个.当子查询跟随在 =.!=.<.<=.>.>= 之后,或子查询用作表达式时,这种情况是不允许的 ...

  3. insert into select 引起的 "子查询返回的值不止一个。当子查询跟随在**之后,或子查询用作表达式时,这种情况是不允许的"

    目录 1.事故现场 1.1 在使用 Insert into Table2 select * from Table1 将表1的数据插入到表2时,报错如下: 1.2 sql 语句 2.推测 3.解决方案 ...

  4. SQL IN 子查询返回多对值

    我们常用的IN 操作是这样的: select * from tab twhere t.col1 in ('value1''value2');12但是如果是多个列的取值来自同一个子查询呢? 我们是不是要 ...

  5. 解决mybatis查询返回结果值串查

    方式一: 通过as 指定 大写重名列的 别名 方式二: 命名数据库中表名时 每个表的主键 id 要起不同的名称, 避免主键重复(但是子表的外键可以和主表的id主键重名, 你想啊, 从表的外键性质不就是 ...

  6. 实现类数组转化成数组(DOM 操作获得的返回元素值是一个类数组)

    目标 实现类数组转化成数组 实例 链接地址 使用方法 const foo = document.querySelectorAll('.result') //链接地址输入控制台输入这行代码 const ...

  7. not子查询中有null值的时候 not in 会失效

    not in子查询中有null值的时候 not in 会失效 但是 in 的子查询中有null的 不会失效

  8. hibernate使用原生SQL查询返回结果集的处理

    今天没事的时候,看到公司框架里有一个用原生SQL写的函数,说实在以前自己也干过这事,但好久都没有用,都忘得差不多了,现在基本都是用的hql语句来查询结果.hibernate中使用createSQLQu ...

  9. Hibernate SQLQuery 原生SQL 查询及返回结果集处理-1

    第一篇:官方文档的处理方法,摘自官方 在迁移原先用JDBC/SQL实现的系统,难免需要采用hibernat native sql支持. 1.使用SQLQuery hibernate对原生SQL查询执行 ...

随机推荐

  1. 【转】PBOC3.0和PBOC2.0标准规范异同分析

    2013年2月,中国人民银行发布了<中国金融集成电路(IC)卡规范(V3.0)>(以下简称PBOC3.0),PBOC3.0是在中国人民银行2005年颁布的<中国金融集成电路(IC)卡 ...

  2. 【Leetcode】【Hard】Search in Rotated Sorted Array

    Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 migh ...

  3. Python初学者第五天 列表及简单操作

    5day 数据类型:列表 1.创建列表 user = ['aa','14',1,10,'aa',1,2,3,3,5,9] n = [] list() m = list() 2.查询 a.按索引查询 b ...

  4. php解决高并发设想

    1.我突然想到一个解决系统并发的一个方法, 当然不算太友好, 就是并发时候,首先加载系统负载量文件, 如果到达一个值,比如60%,就跳到404页面,或者输出稍后之类的这样 2.静态文件和图片存到cdn ...

  5. 设计模式:备忘录(Memento)模式

    设计模式:备忘录(Memento)模式 一.前言   备忘录模式用于保存和恢复对象的状态,相信大家看过我前面的拙作就会想到原型模式也能保存一个对象在某一个时刻的状态,那么两者有何不同的呢?原型模式保存 ...

  6. July 14th 2017 Week 28th Friday

    A life without a dress rehearsal, every day is broadcast live. 人生没有彩排,每天都是现场直播. Every day when I pre ...

  7. ZT 俞敏洪:2014我要闭嘴 相信未来不是梦

    俞敏洪:2014我要闭嘴 相信未来不是梦 手机免费访问www.cnfol.com2013年12月11日 08:38 中国企业家网 查看评论 字体:小  中  大中金在线微博微信加关注 扫描二维码 关注 ...

  8. 018os模块

    import   osprint(os.getcwd())   # 获取当前目录  F:\python_code\fullstack_s2\week4\day18 os.chdir(r'C:/User ...

  9. ubuntu 杀死进程命令

    如果是查看本机所有的进行的进程: ps aux # 用ps -A查看所有进程 杀死进程: kill -9 PID # PID是进程号,查看进程时会显示

  10. [转]ubuntu下整合eclipse和javah生成jni头文件开发android的native程序

    转载自:http://blog.csdn.net/jiuyueguang/article/details/9404237 本文介绍两种利用javah命令生成jni头文件的方法,第一种为大众所知的jav ...