mysql中in嵌套select只能查询出一个结果
使用SELECTknowledgeFROM`fk_lesson`WHERElessonname='离散数学'的查询结果是:19,20,21,22,23,24,25,26,...
使用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里边第一个结果的值。。这是为什么呢?求解 展开
将结果带入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里边第一个结果的值。。这是为什么呢?求解 展开
展开全部
没见过这么不严谨的写法……
好吧,你每次执行WHERE id in (SELECT knowledge……)里面的数据的时候,括号里面都要执行一次。
可能就是因为这个原因导致的错误。具体不明。
好吧,你每次执行WHERE id in (SELECT knowledge……)里面的数据的时候,括号里面都要执行一次。
可能就是因为这个原因导致的错误。具体不明。
更多追问追答
追问
对呀,,就是要每次查询的时候,括号里边的要执行啊。。。求纠正
追答
可能……或许。如果括号内是一个变量,可能会遍历一遍。(这次第一个下次第二个)
如果是个函数,那么执行以后先审核第一个,然后下次又是第一个。(因为查询出来的总会被认为是新的。)
展开全部
追答
呵呵, 这种是肯定不行的.
对于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后面的语句,结果是多条?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询