【问题标题】:MySQL subquery on itself returns all recordsMySQL子查询本身返回所有记录
【发布时间】: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 子句,你几乎可以肯定你做错了什么

标签: mysql sql subquery


【解决方案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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-02
    • 2017-01-30
    • 2019-05-26
    • 1970-01-01
    • 2014-06-19
    相关资源
    最近更新 更多