我想查询A表的所有字段,条件是它的id字段和B表的mid字段相等 如何写SQL语句 麻烦大家了

select*fromAwhereid=(selectaidfromB)这个语句怎么不行不明白... select * from A where id=(select aid from B) 这个语句怎么不行 不明白 展开
 我来答
zhishouxin
2011-08-08 · TA获得超过187个赞
知道答主
回答量:75
采纳率:0%
帮助的人:104万
展开全部
id= 这个等号后边,必须要求是一个唯一的值,这样才能使等式成立。
而select aid from B返回的是一个集合,那么等于集合,明显是错误的。
数据库有关键字IN,可以使用select * from A where id in (select aid from B)

另外,你这个没有必要这么写
select a.* from a, b where a.id = b.aid
这么写就可以了。

另外还有一种写法,使用exists
select * from a where exists (select 1 from b where a.id = b.aid)
更多追问追答
追问
弱弱的问一下:这个语句怎么没达到我想要的效果

我想只取一个 怎么把A表的数据都列出来了 怎么回事?? 那条件貌似没用??
追答
是select * from A where id in (select aid from B) 这个语句么?
这个要看你的select aid from b返回多少记录了。
这个语句肯定是没有问题的。
以上我列出的三个语句,查询得到的结果肯定都是一样的。
查询的内容就是查询a表的所有字段,条件是当a表的字段id在b表存在的时候。
这三个语句的语法都很简单,我想你看一下也能知道这个语句肯定是没问题的。
您可以使用select aid from b确认一下b表的aid字段都有什么,然后随便找出两个。
比如select aid from b返回以下:
aid
001
002
003

你用上面的三个到a表写select * from a where id = '001'
select * from a where id = '00'2'
select * from a where id = '003'
看看是不是都有结果,我想你这个返回一条,估计不会,肯定会有不少符合条件的数据。
wangzhiqing999
2011-08-08 · TA获得超过1.6万个赞
知道大有可为答主
回答量:7048
采纳率:100%
帮助的人:3320万
展开全部
可以修改为:
select * from A where id IN (select aid from B)

因为 当 select aid from B 返回多行记录的时候.
select * from A where id=(select aid from B)
是要抱错的.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式