select * from A join B on A.id in (B.sid);
怎么实现连接查询的时候,像where一样用in来做连接两张表的条件
如果我没理解错你的问题的话,你这个直接用等于就可以了
select * from A join B on A.id=B.sid
如果你只是想查询A表的数据,那么你可以这样
select * from A where Id in (select sid from B)
或
select * from A where exists (select 1 from B where B.sid=A.Id)
A表的id是自增的主键,B表的sid是普通字段,并且还包括多个A表的id(通过逗号隔开的),我是想要A表中的id在B表中的sid中存在就查询出来
select * from A where exists (select 1 from B where B.sid like '%,'+CAST(A.Id as nvarchar)+',%' or B.sid like CAST(A.Id as nvarchar)+',%' or B.sid like '%,' +CAST(A.Id as nvarchar))
或者,你先想办法将B的sid按逗号分隔并转换为行数据存放到临时表,然后再做这样的查询
select * from A join B on A.id=B.sid
但是不管怎么样,这种设计都是不合理的,要从设计上避免这种将逗号拼接Id存储的问题
@izan: 我最开始想的也是用你说的第二种方法,先将它转换成集合或者数组的形式,遍历再用select * from A join B on A.id=B.sid查询,感觉这样子会增加查询数据库的负担,所以就想问一下有没有直接用in来做连接两张表的条件
@xx_1234: 你这种设计,不管怎么样做都会增加负担,反而先切割好放到临时表可能还会更快
@izan: 意思是设计一张中间表吗?但是是线上的项目,数据库不敢做太大的改动
@izan: 感谢大佬
你忘了指定连接的类型吧。join前面要加上连接类型的连接类型包括inner join、left join、right join、full out join
都试了的,不行
试试:select * from a,b where a.id=b.sid and 其他条件
其他条件这里可以用你所说的In
试过了,不得行
这个是您理解的问题,连接是乘法操作,你这里a.sid in (b.sid) 其实就是a.sid=b.sid了,但是您的真实意思有可能不是这个。
是否是想查询 a的id在b中有的记录?
那么就直接 select * from a where a.id in(select id from b) x 这样就可以了。这个主要看您是什么意思
我是想要A表中的id在B表中的sid字段中存在就查询出来,A表的id是自增的主键,B表的sid是普通字段,并且还包括多个通过逗号隔开的A表的id
@xx_1234: in就可以了。