使用SELECT knowledge FROM `fk_lesson` WHERE lessonname='离散数学'的查询结果是:19,20,21,22,23,24,25,26,27
将结果带入SELECT * FROM `fk_knowledge` WHERE id in (19,20,21,22,23,24,25,26,27);
可以正确的查出
但是如果
SELECT * FROM `fk_knowledge` WHERE id in (SELECT knowledge FROM `fk_lesson` WHERE lessonname='离散数学');
将两句合成一句,这样就只能查出IN里边第一个结果的值。。这是为什么呢?求解
对呀,,就是要每次查询的时候,括号里边的要执行啊。。。求纠正
追答可能……或许。如果括号内是一个变量,可能会遍历一遍。(这次第一个下次第二个)
如果是个函数,那么执行以后先审核第一个,然后下次又是第一个。(因为查询出来的总会被认为是新的。)
那应该怎么修改呢
追答把括号内查询赋值给一个数组变量。
这时一个很简单的子查询应用. 是可以这样写的.
这种子查询效率 要比 from a,b 这种效率高很多.
楼主一定是在某步搞错了, 我刚在本地执行了一下. 也是可以的
不知道楼主是不是在命令行里执行的.
如果是程序执行的,最好在命令行里执行一遍.
人格担保,楼主这种sql是没问题的.
见下图
追问其实我的里边那个数据是都保存到一个字段了,没有一每条记录的形式保存
呵呵, 这种是肯定不行的.
对于mysql来说
他不知道你的子查询出来了多少条结果,子查询有多少条记录,外围的in里 mysql就会去判断几次
select * from table where id in(1,2,3);
对于这条sql
mysql会转换为3条sql, 分别为 where id=1; where id=2; where id=3
所以你的sql 最终被解释成了
SELECT * FROM `fk_knowledge` WHERE id '19,20,21,22,23,24,25,26,27';
所以只能出来一条结果.
哈哈,千真万确~。。。尝试过很多次
追答你把这句话放你数据库里先执行in后面的语句,结果是多条?
追问必须是啊