【问题标题】:One to Many relationship / for each in SQL querySQL查询中的一对多关系/每个
【发布时间】:2018-07-15 18:24:09
【问题描述】:

我有两个表表1和表2,它们之间的关系是:一个--->很多。

Table 1 --> CaseNumber 是 PK |创建日期 |修改日期

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

表 2 有许多相同 CaseNumber 的记录。我想查询以下内容:

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

不适用于特定的 CaseNumber。当我删除 where 子句时,奇怪的事情发生了。我不能为每个案例编号取最小值。我收到多行相同的案例编号。似乎 min(age) 不起作用。

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

示例记录如下:

表 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 Age

      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 岁

【问题讨论】:

  • 可以添加ssample记录吗?
  • 我添加了一些例子

标签: sql sql-server


【解决方案1】:
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

【讨论】:

  • 它有效 :) 我正在尝试类似的东西,但是我使用 ORDER BY 而不是 GROUP BY,非常感谢 JW
  • 另外,如果我没有将 b.Age 放在 GROUP BY 子句中,我会收到一些重复。为什么?
  • 我的代码应该按预期工作,请参阅:sqlfiddle.com/#!2/7a4aa/1
  • 它工作你是对的,但是请尝试在 Select 子句和 GROUP BY 子句中添加 b.Id 然后它不能正常工作,我不能在 Table2 b 的 SELECT 子句中添加更多列?
  • 所以你需要ID?这不会给你正确的结果,因为你正在对它进行分组,包括来自 table2 的ID,因为假设它是自动递增的,等待我更新它。
【解决方案2】:
选择 B.Id ,B.CaseNumber,MIN(B.Age),A.CreateDate , A.修改日期 从表 1 A A.CaseNumber = B.CaseNumber 上的 INNER JOIN TABLE2 B 其中 B.CaseNumber = 7 按 B.Id、B.CaseNumber、A.CreateDate、A.ModifiedDate 分组

【讨论】:

  • 如果我通过删除 WHERE 子句来编辑查询以检索每个 caseNumber 的最小年龄,则无法正常工作。
【解决方案3】:
选择 B.Id ,B.CaseNumber,MIN(B.Age),A.CreateDate , A.修改日期 从表 1 A A.CaseNumber = B.CaseNumber 上的 INNER JOIN TABLE2 B WHERE B.CaseNumber IN(从表 2 中选择 CaseNumber) 按 B.Id、B.CaseNumber、A.CreateDate、A.ModifiedDate 分组

你试试这个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多