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里边第一个结果的值。。这是为什么呢?求解
展开
 我来答
haha6day
2013-09-26 · TA获得超过220个赞
知道小有建树答主
回答量:241
采纳率:0%
帮助的人:109万
展开全部
没见过这么不严谨的写法……
好吧,你每次执行WHERE id in (SELECT knowledge……)里面的数据的时候,括号里面都要执行一次。
可能就是因为这个原因导致的错误。具体不明。
更多追问追答
追问
对呀,,就是要每次查询的时候,括号里边的要执行啊。。。求纠正
追答
可能……或许。如果括号内是一个变量,可能会遍历一遍。(这次第一个下次第二个)
如果是个函数,那么执行以后先审核第一个,然后下次又是第一个。(因为查询出来的总会被认为是新的。)
漫靖厹0r
2013-09-26 · TA获得超过214个赞
知道答主
回答量:46
采纳率:0%
帮助的人:63万
展开全部

这时一个很简单的子查询应用. 是可以这样写的.

这种子查询效率 要比 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';
所以只能出来一条结果.
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友13eb05f
2013-09-26 · 超过12用户采纳过TA的回答
知道答主
回答量:68
采纳率:0%
帮助的人:28.6万
展开全部
貌似不可能吧
更多追问追答
追问
哈哈,千真万确~。。。尝试过很多次
追答
你把这句话放你数据库里先执行in后面的语句,结果是多条?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式