sinat_36300982 2019-01-10 16:49 采纳率: 0%
浏览 1393

mysql 为什么子查询产生语法错误,而整体查询却不报错且返回正确结果

查出选修了数据库和数学这两门课程的学生姓名和院系
数据库表,字段信息如下

课程表course:
select * from course ;
cno    cname
1001    数学
1002    数据库
1003    语文

学生表student:
select * from student ;
sno         sname  sex   age   sdept
20121011    张三  男 18  计算机
20131011    李四  男 17  计算机
20131012    王五  女 16  信息
20131013    赵六  女 19  信息

选课表sc:
    select * from sc;
sno         cno    grade
20131011    1001    100
20131012    1001    70
20131011    1002    98

sql:

SELECT 
    sname, sdept

from Student 

WHERE sno IN ( 
    SELECT sno FROM sc WHERE cno IN ( 
        SELECT cno FROM course WHERE cname = '数学' 
            AND sno IN ( 
                SELECT sno FROM sc WHERE cno IN ( 
                    SELECT cno FROM course 
                    WHERE cname = '数据库' ))));

运行结果为:

sname  sdept
李四  计算机

期望的结果是运行失败,因为针对第三层子查询来说,提示语法错误:

SELECT cno FROM course WHERE cname = '数学' AND sno IN ( 
    SELECT sno FROM sc WHERE cno IN ( 
        SELECT cno FROM course WHERE cname = '数据库' ))

[Err] 1054 - Unknown column 'sno' in 'IN/ALL/ANY subquery'

疑问:为什么在子查询失败的情况下,整体查询能正常执行???

  • 写回答

5条回答 默认 最新

  • L星火燎原 2019-01-10 17:23
    关注

    估计是你这个版本的mysql有这个容错机制,因为你前面几句查询都是对的,所以他直接忽略后面的错误

    评论

报告相同问题?

悬赏问题

  • ¥15 如何提取csv文件中需要的列,将其整合为一篇完整文档,并进行jieba分词(语言-python)
  • ¥15 MapReduce结果输出到HBase,一直连接不上MySQL
  • ¥15 扩散模型sd.webui使用时报错“Nonetype”
  • ¥15 stm32流水灯+呼吸灯+外部中断按键
  • ¥15 将二维数组,按照假设的规定,如0/1/0 == "4",把对应列位置写成一个字符并打印输出该字符
  • ¥15 NX MCD仿真与博途通讯不了啥情况
  • ¥15 win11家庭中文版安装docker遇到Hyper-V启用失败解决办法整理
  • ¥15 gradio的web端页面格式不对的问题
  • ¥15 求大家看看Nonce如何配置
  • ¥15 Matlab怎么求解含参的二重积分?