【发布时间】:2016-01-21 01:19:29
【问题描述】:
我想选择给定字段中具有最小值的子查询的所有行。以下是我迄今为止尝试过的一些技术示例:
-- 1.
select
id, min(foo)
from
(select 1 AS id, 2 AS foo
union select 2 AS id, 2 AS foo
union select 3 AS id, 3 AS foo) a;
-- 2.
select
min(foo)
from
(
select 1 AS id, 2 AS foo, 0 AS const
union select 2 AS id, 2 AS foo, 0 AS const
union select 3 AS id, 3 AS foo, 0 AS const) a
group by const;
-- 3.
select
id
from
(select 1 AS id, 2 AS foo
union select 2 AS id, 2 AS foo
union select 3 AS id, 3 AS foo) a
where id = (select id from a where min(foo) = foo);
-- 4.
select
id
from
(select 1 AS id, 2 AS foo
union select 2 AS id, 2 AS foo
union select 3 AS id, 3 AS foo) a
where foo = (select min(foo));
-- 5.
select r.*
from
(
select min(foo) t
from
(select 1 AS id, 2 AS foo
union select 2 AS id, 2 AS foo
union select 3 AS id, 3 AS foo) a
) m
INNER JOIN a ON m.t = r.foo;
我正在处理的实际查询与示例类似,因为它由几个较小的查询联合在一起组成。这里的总体目标是根据关联表 k 的字段在 central 表中查找一行,其中 k 是最高优先级表。结果是来自相似(但不同表)的行的一种树状视图。
我已经提到了这一点,以防万一有人看到我正在绕道而行,他们可以对大局有所了解。但现在我的角度是通过在子查询中的字段上取最小值来选择。
【问题讨论】: