MySQL子查询本身返回所有记录

Posted

技术标签:

【中文标题】MySQL子查询本身返回所有记录【英文标题】:MySQL subquery on itself returns all records 【发布时间】:2019-05-22 13:42:51 【问题描述】:

以下查询返回所有结果,但根据我的理解应该返回与子查询相同的 ID。有人可以解释为什么返回所有 ID 的子查询(单独运行时)返回所有记录

select mya.id from mytable mya WHERE mya.id IN (
   SELECT myb.id 
   FROM mytable myb
   GROUP BY myb.mysecondcolumn
)

例如,子查询作为单独查询运行时会返回 1,5,10,15,但是当我在上面运行此查询时,它会返回 1,2,3,4,5,...

谢谢!

【问题讨论】:

嗨,添加产生意外结果的示例数据会有所帮助,谢谢。 @JNDPNT 子查询和主表一样吗? 任何时候你发现自己使用了没有任何聚合函数的 GROUP BY 子句,你几乎可以肯定你做错了什么 【参考方案1】:

您的查询格式不正确。您需要在子查询中使用聚合函数。也许:

select mya.id
from mytable mya 
where mya.id in (SELECT MIN(myb.id)
                 FROM mytable myb
                 GROUP BY myb.mysecondcolumn
                );

这并不能解释您的实际问题。我的猜测是子查询 is 返回所有 id,但顺序不同。您可以通过查看以下结果来检查是否是这种情况:

SELECT MIN(myb.id)
FROM mytable myb
GROUP BY myb.mysecondcolumn
ORDER BY MIN(myb.id)

【讨论】:

以上是关于MySQL子查询本身返回所有记录的主要内容,如果未能解决你的问题,请参考以下文章

为啥 MySql 会出现“子查询返回超过 1 行”错误?

返回子查询中的最后一条记录 - MySQL

如何从单个 MySQL 查询中获取 Parent 的所有子记录 [重复]

mysql连接查询和子查询

7_mysql查询之where子句

MySQL-SQL基础-子查询