在Mysql5.0 中In 用法的疑惑
发布网友
发布时间:2022-04-23 02:55
我来回答
共3个回答
热心网友
时间:2022-04-11 05:37
select arrchild from B 的查询结果是一条记录内容是一字符串(1,2,35,5)
这种情况下,
执行
SELECT * FROM A where A.bigclass in(select arrchild from B)
相当于执行
SELECT * FROM A where A.bigclass in( '1,2,35,5' )
结果肯定是没有。
假如你的
select arrchild from B 的查询结果是
1
2
35
4
这样的 4 行数据。
那么
SELECT * FROM A where A.bigclass in(select arrchild from B)
就等价于
SELECT * FROM A where A.bigclass in(1,2,35,5)
如果
select arrchild from B 的查询结果是一条记录内容是一字符串(1,2,35,5)
又要实现
SELECT * FROM A where A.bigclass in(1,2,35,5) 的效果。
一个变通的办法是:
SELECT * FROM A
where
INSTR ( CONCAT ( ',' , (select arrchild from B) , ',' ),
CONCAT (',' , A.bigclass , ',' ) ) > 0追问啊,我明白了
SELECT * FROM A where A.bigclass in(1,2,35,5) 这里面的(1,2,35,5) 相当于多个值。
而(select arrchild from B 的查询结果有且只有一条记录且内容是就是 "1,2,35,5")相当于一个值。
热心网友
时间:2022-04-11 06:55
使用的时候他会将select arrchild from B查询出来的每条记录当做一个整体
SELECT * FROM A where A.bigclass in(select arrchild from B) 这个相当于
SELECT * FROM A where A.bigclass in( ‘1,2,35,5’ ) ----所以查不出来
------------------------------
arrchild
1,2,35,5
------------------------------
想要下面的结果,
select arrchild from B这个查询出来的结果要是这样的
----------------------------------------
arrchild
1
2
35
5
----------------------------------------追问注:select arrchild from B 的查询结果有且只有一条记录且内容是就是 "1,2,35,5"
热心网友
时间:2022-04-11 08:30
不是查不到,应该是速度很慢。如果可以的话尽量使用=来代替in语句,myql的in语句貌似没有优化过,效率很低的