wxjzqym 发表于 2012-6-6 09:25:26

047题库中一道关于not exists的疑问?

SELECT location_id, city
FROM locations l
WHERE NOT EXISTS
(SELECT location_id FROM departments WHERE location_id <> l.location_id);
    请问各位谁能给我讲讲应该如何理解这个not exists吗,如果是exists我还比较好理解,不过我还是不理解为什么上面那条sql一条记录都没返回?
    因为我的理解是如果是要找not exists+"<>"的记录那不就是找exists+"="的记录吗,感觉这样理解又不太对,请教各位了。。 谢谢!

oraask2 发表于 2012-6-6 13:39:18

这个是有点绕。做个实验呗

not exists+"<>" 的意思是 不存在不等于的
exists+"="          的意思是 存在相等的 只要有一条就可以

对于一个表的列如果数据如下
col
1
2
3
4

当代入的值为1
[ not exists   (seleft ..... where col !=1)] 这个表达式返回的值就为false 因为1=1 存在一条不满足条件的 (虽然2 3 4 !=1 但是1=1所以存在一条不满足的就可以)
[ exists   (seleft ..... where col =1)]这个表达式返回值为true 因为1=1 存在一条满足条件则表达式就为true

wxjzqym 发表于 2012-6-6 16:26:38

甲骨论-晨曦 发表于 2012-6-6 13:39 static/image/common/back.gif
这个是有点绕。做个实验呗

not exists+"" 的意思是 不存在不等于的


关于exists的说法我同意,不过关于not exists我有不同的意见,我觉得not exists为false是因为子查询中的col有满足条件col!=1的值,而如果要not exists为true,那么子查询中col里面的值都应该不满足于条件col!=1。

oraask2 发表于 2012-6-6 23:08:27

wxjzqym 发表于 2012-6-6 16:26 static/image/common/back.gif
关于exists的说法我同意,不过关于not exists我有不同的意见,我觉得not exists为false是因为子查询中的c ...

OK you are right

无是无非 发表于 2012-7-3 10:45:26

这个语句相当于双重否定,所以不可能有值。
页: [1]
查看完整版本: 047题库中一道关于not exists的疑问?