日期:2014-05-19  浏览次数:20525 次

一个查询问题
表:   孩子
id   年龄       姓       名
  1     1           李       三           ****
  2     2           李       四
  3     1           王       四
  4     2           王       五
  5     3           王       靠
  6     4           王       三         ****
  7     5           王       三
查询:名叫“三”的   ,各个“姓”中,年龄最小的那个(假设   每个“姓”都至少有一个年龄为1的孩子,再有同“姓”的孩子“年龄”加1)
应该得到的结果是
1       1         李     三
6       4         王     三
应该如何实现

------解决方案--------------------
select
t.*
from
表 t
where
t.名= '三 '
and
not exists(select 1 from 表 where 姓=t.姓 and 名=t.名 and 年龄 <t.年龄)
------解决方案--------------------
--方法一
Select * From 表 A
Where Not Exists(Select 年龄 From 表 Where 姓 = A.姓 And 名 = A.名 And 年龄 < A.年龄)
And A.名 = '三 '

--方法二
Select * From 表 A
Where 年龄 = (Select Min(年龄) From 表 Where 姓 = A.姓 And 名 = A.名)
And A.名 = '三 '

--方法三
Select A.* From 表 A
Inner Join
(Select 姓, 名, Min(年龄) As 年龄 From 表 Group By 姓, 名) B
On A.姓 = B.姓 And A.名 = B.名 And A.年龄 = B.年龄
Where A.名 = '三 '
------解决方案--------------------
select * from t a
where 名 = '三 '
and 年龄 = (select min(年龄) from t where 姓 = a.姓 and 名 = a.名)