但是如果写成select * from xx1 where id in (select tmp.id from (select id from xx2 limit 100) as tmp) 就没问题。
想讨论下,这个问题的来由是什么呢?
5 个解决方案
#1
select * from xx1 a inner join
(select id from xx2 limit 100) b
on a.id=b.id
(select id from xx2 limit 100) b
on a.id=b.id
#2
这样也是可以的。。
那为什么这样可以而在子查询里不行呢。。。
那为什么这样可以而在子查询里不行呢。。。
#3
没有什么为什么,这是MYSQL本身的限制。
#4
语法
#5
用in的时候,非关联子查询不也是先执行子查询保存在内存中然后再拿外层的行来比较么?
那为什么select * from xx1 where id in (select tmp.id from (select id from xx2 limit 100) as tmp) 这样反而就没问题了。
mysql提示的是不支持子查询中使用limit。上面这个语法和出错那个语法有什么本质区别么?如果没有,单纯做这个语法限制的动机是什么呢?
那为什么select * from xx1 where id in (select tmp.id from (select id from xx2 limit 100) as tmp) 这样反而就没问题了。
mysql提示的是不支持子查询中使用limit。上面这个语法和出错那个语法有什么本质区别么?如果没有,单纯做这个语法限制的动机是什么呢?
#1
select * from xx1 a inner join
(select id from xx2 limit 100) b
on a.id=b.id
(select id from xx2 limit 100) b
on a.id=b.id
#2
这样也是可以的。。
那为什么这样可以而在子查询里不行呢。。。
那为什么这样可以而在子查询里不行呢。。。
#3
没有什么为什么,这是MYSQL本身的限制。
#4
语法
#5
用in的时候,非关联子查询不也是先执行子查询保存在内存中然后再拿外层的行来比较么?
那为什么select * from xx1 where id in (select tmp.id from (select id from xx2 limit 100) as tmp) 这样反而就没问题了。
mysql提示的是不支持子查询中使用limit。上面这个语法和出错那个语法有什么本质区别么?如果没有,单纯做这个语法限制的动机是什么呢?
那为什么select * from xx1 where id in (select tmp.id from (select id from xx2 limit 100) as tmp) 这样反而就没问题了。
mysql提示的是不支持子查询中使用limit。上面这个语法和出错那个语法有什么本质区别么?如果没有,单纯做这个语法限制的动机是什么呢?