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子查询本身返回所有记录的主要内容,如果未能解决你的问题,请参考以下文章