SQL查询中的每个关系/一对多关系

时间:2013-05-28 06:20:10

标签: sql sql-server

我有两张桌子表1&表2和它们之间的关系是:一个--->许多。

表1 - > CaseNumber是PK | CreatedDate | ModifiedDate

表2 - > Id是PK | CaseNumber是FK |年龄

表2列出了同一CaseNumber的许多记录。我想查询以下内容:

表2中的每个CaseNumber都会找到最小年龄。例如找出表2中所有记录的最小年龄。

不适用于特定的CaseNumber 。当我删除where子句时......发生了奇怪的事情。我不能为每个案件编号采取最低限度。我收到的是同一个案例编号的行。似乎min(年龄)不起作用。

我有一些困难,因为这种关系是一对多的。我该怎么处理?

样本记录如下:

表1 CaseNumber CreatedDate ModifiedDate

        1        12/12/2012 25/12/2012
        2        14/12/2012 15/12/2012
        3        16/12/2012 16/12/2012
        4        17/12/2012 17/12/2012
        5        17/12/2012 25/12/2012

表2 Id CaseNumber年龄

      1  2         23
      2  2         34
      3  2         19
      4  3         25
      5  4         26
      6  4         50

我想只返回3行:

案例编号2,年龄19岁

第3号病例,年龄25岁

案例编号4,年龄26岁

3 个答案:

答案 0 :(得分:0)

SELECT  CaseNumber, CreatedDate, ModifiedDate, 
        MIN(b.Age) Age
FROM    Table1 a
        INNER JOIN Table2 b
            ON a.CaseNumber = b.CaseNumber
WHERE   a.CaseNumber = 7
GROUP   BY CaseNumber, CreatedDate, ModifiedDate

答案 1 :(得分:0)


SELECT  B.Id ,B.CaseNumber,MIN(B.Age),A.CreateDate ,
        A.ModifiedDate
FROM    TABLE1 A
        INNER JOIN TABLE2 B ON A.CaseNumber = B.CaseNumber
WHERE   B.CaseNumber = 7
GROUP BY B.Id,B.CaseNumber,A.CreateDate,A.ModifiedDate

答案 2 :(得分:0)


SELECT  B.Id ,B.CaseNumber,MIN(B.Age),A.CreateDate ,
        A.ModifiedDate
FROM    TABLE1 A
        INNER JOIN TABLE2 B ON A.CaseNumber = B.CaseNumber
WHERE   B.CaseNumber IN (SELECT CaseNumber from Table2)
GROUP BY B.Id,B.CaseNumber,A.CreateDate,A.ModifiedDate

你试试这个。