mysql子查询中的any_value与where in失效
问题描述:
select * from test where id in (select any_value(id) from test group by type);
虽然预期输出每个分组的第一行记录,但结果却返回了整个表。
问题分析:
问题一:
使用any_value函数的子查询会导致where in失效。因为any_value函数返回任意一行匹配记录的值,它不保证返回唯一值,这可能会导致where in比较失败。
问题二:
如果在子查询中省略as id别名,mysql将无法找到select id from …语句中的id列,因为子查询没有命名其结果列。在这种情况下,mysql会尝试自动生成列名,这可能会导致不确定的行为,例如返回整个表。
解决方案:
问题一:
使用group by和min函数返回每个分组的最小id值,从而确保返回唯一值:
select * from test where id in (select min(id) from test group by type);
问题二:
显式指定子查询结果列的别名:
select * from test where id in (select id from (select any_value(id) as id from test GROUP BY type) as temp);
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END