我想查询A表的所有字段,条件是它的id字段和B表的mid字段相等 如何写SQL语句 麻烦大家了
select*fromAwhereid=(selectaidfromB)这个语句怎么不行不明白...
select * from A where id=(select aid from B) 这个语句怎么不行 不明白
展开
2个回答
展开全部
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)
而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'
看看是不是都有结果,我想你这个返回一条,估计不会,肯定会有不少符合条件的数据。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询