mysql中写if not exists报错,求大神看看

mysql中写if not exists报错,求大神看看,第1张

mysql中不支持if not exists 像你那样的用法

mysql 用法:

1. 最常用的if not exists用法: create tableif not exists AA 如果表AA不存在(返回true)则创建表

2. select 语句中使用exists, 如:

select a.id,a.name from user where exists (select * from class where a.class_id = c.class_id)

3. insert into中使用not exists, 为了表中不插入重复语句,可以在insert into 中使用not exists进行判断,如果不存在相同的记录(not exists返回true)则插入,否则不执行,语句如下:

insert into tableA(id,name,start_time,ds)

select '1234','testName','2017-07-01 18:00:00','20170701 ' from dual WHERE not exists (select * from tableA

where instance_id = '1234' )

现在我们来分析一下题主的问题。

先来看看书中的语句

SELECT cname FROM course WHERE NOT exists

(SELECT * FROM sc,student WHERE sc.sno=student.sno AND 

sc.cno=course.cno AND ssex='男')

这是一个父子关联 not exists 非存在子查询。我们知道父子关联exists子查询可检索出主查询结果集(父)中与子查询结果集(子)的“交集”,加上关键字not则取反,返回父中与子的“非交集”。

那么上述语句的实际上是返回课程表"course"中所有的课程中与被男生选修过课程的“非交集”。也就是在剩下的未被男生选修过的课程列表里,即可能存在被女生选修过的课程,也可能存在男生和女生都没有选修过的课程。从这个角度来看书中的SQL语句的运行结果是正确的,数据库引擎运算不存在BUG。

如果书中说“选出未被男生选读的课程名单”上述语句是正确的,如果以此反推未被男生选过的课程就是“只有女生选过的课程”就不够严谨,因为这正如上面所说过的那样,男生未选读的课程还可能包含女生也未选读的课程。严格来讲,要列出“只有女生选读的课程”,除了要排除男生外,还要排除女生未选读的课程。题主的第二个语句对主表做了进一步筛选因此有了不一样的效果。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8342159.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-15
下一篇 2023-04-15

发表评论

登录后才能评论

评论列表(0条)

保存