• 主页
  • 基础类
  • 应用实例
  • 新技术前沿

sql高手请进,100分相送,多谢了!

lci21 2001-12-08 05:54:44
表A字段:
a_id a_name
1 name1
2 name2
3 name3
4 name4
5 name5
6 name6
7 name7
8 name8
9 name9
表B:
b_id b_name b_aid
111 bname1 3
112 bname2 3
113 bname3 7
114 bname4 3
115 bname5 7
其中表B中的b_aid取自表A中的a_id
现在我需要取出所有的a_id from 表A,条件是a_id在表B中的b_aid不存在
即:
select a_id from A where a_id not in (select distinct b_aid from B);
应该取出1,2,4,5,6,8,9
但却返回0条记录
而select a_id from A where a_id in (select distinct b_aid from B);
能取出3,7
我用select a_id from A where a_id not in (3,7);就能获得正确的结果
请问这是为什么?应该怎么写这条sql语句?
我用的数据库是informix

...全文
69 点赞 收藏 10
写回复
10 条回复
Corny 2001年12月09日
这个问题不应该存在,好好看看你的表。要不,建个索引看看
回复 点赞
Corny 2001年12月09日
没区别
回复 点赞
水煮蛙 2001年12月09日
子查询
回复 点赞
bjay 2001年12月09日
不妨试一试这句,首先说明,我没试,不一定能成。
select a_id from A where a_id in (select distinct b_aid as a_aid from B);
回复 点赞
sp_2000 2001年12月09日
我不知道你的库是什么回事,可我用下边的语句一点错也没有。
create table a(
id int)
create table b(
id int)
select distinct id from a where a not in (select distinct id from b)
我的表可一点要求都没有
回复 点赞
lci21 2001年12月08日
长度类型都是一样的,我想问一下,加上where b.b_aid=a_id 和不加有差别吗?
回复 点赞
backlove 2001年12月08日
select * from a
where a_id not exists(select a.a_id from a,b where a.a_id=b.b_aid)
回复 点赞
nononono 2001年12月08日
你的a_id与b_aid的类型是不是字符型且长度不同?
回复 点赞
lci21 2001年12月08日
请问,不加条件不行吗?多谢windindance
回复 点赞
windindance 2001年12月08日
select a_id from A where a_id not in (select distinct b_aid from B where b.a_aid = a_id)
回复 点赞
发动态
发帖子
MS-SQL Server
创建于2007-09-28

1.4w+

社区成员

25.3w+

社区内容

MS-SQL Server相关内容讨论专区
社区公告
暂无公告