用not exists 为什么得不到我的结果。

yeag 2003-11-26 09:52:33
tableroom表中有tname字段(主键),Orderstable表中也有tname字段(外键)。
tableroom表中有6条记录,TN1,TN2,TN3,TN4,TN5,TN6
Orderstable表中有2条记录,TN1,TN2
用 select Orderstable.Tname from Orderstable 可得到两条记录TN1,TN2
但用 not exists 却得不到我的结果为什么。
语法如下:
select tname from tableroom
where not exists
(select Orderstable.Tname from Orderstable)

结果是空。
真实的结果应该是TN3,TN4,TN5,TN6。

为什么
...全文
127 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
FBugFramework 2003-11-26
  • 打赏
  • 举报
回复
exists高
welyngj 2003-11-26
  • 打赏
  • 举报
回复
exists的高
yeag 2003-11-26
  • 打赏
  • 举报
回复
是in效率高还是exists高呢。
txlicenhe 2003-11-26
  • 打赏
  • 举报
回复
select tname from tableroom
where tname not in
(select Orderstable.Tname from Orderstable)


select tname from tableroom a
where not exists
(select Orderstable.Tname from Orderstable where Tname = a.tname)


victorycyz 2003-11-26
  • 打赏
  • 举报
回复
or:
select
tname
from
tableroom a left join orderstable b on a.tname=b.tname
where
b.tname is null
zjcxc 元老 2003-11-26
  • 打赏
  • 举报
回复
或者:

select a.tname from tableroom a left join orderstable b on a.tname=b.tname
where b.tname is null

zjcxc 元老 2003-11-26
  • 打赏
  • 举报
回复

如果是要得到楼主要求的结果,应该是用:

select tname from tableroom a
where not exists
(select 1 from Orderstable where tname=a.tname)
pengdali 2003-11-26
  • 打赏
  • 举报
回复
select tname from tableroom a
where not exists
(select 1 from Orderstable where tname=a.tname)
pengdali 2003-11-26
  • 打赏
  • 举报
回复
select tname from tableroom
where tname not in
(select Orderstable.Tname from Orderstable)
welyngj 2003-11-26
  • 打赏
  • 举报
回复
select tname from tableroom a
where not exists
(select Orderstable.Tname from Orderstable b where a.tname=b.tname)
victorycyz 2003-11-26
  • 打赏
  • 举报
回复
select tname from tableroom
where tname not exists
(select Orderstable.Tname from Orderstable)

34,874

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧