【问题标题】:SQL - Join part of one table into another, based on two columns matchingSQL - 根据两列匹配将一个表的一部分连接到另一个表中
【发布时间】:2011-09-24 15:09:55
【问题描述】:

我有两张表,我希望将一张表中的数据合并到另一张表中。具体来说,Table_A 是数百万条来自医院的患者出院记录; table_B 说明特定医院是否被标记为 Acute Care Facility。我想从表 A 中获取所有记录,其中 Hospital 是 Acute Care Facility。

表A有很多字段;相关性:

HOSPITAL_ID | YEAR_AND_QUARTER | RECORD_ID

记录 ID 是唯一的。每个 HOSTPIAL_ID 有数百到数千条记录 (RECORD_ID),每个 YEAR_AND_QUARTER 有数百个 HOSPITAL_ID

Table_B 有几个字段:

HOSPITAL_ID | YEAR_ALONE | ACUTE_INDICATOR
1223 | 2004 | X  
1223 | 2005 | X  
1289 | 2004 |  
1289 | 2005 | X  

Hospital_ID AND Year 同时出现一次。

我无法加入 Hospital_ID,因为在表 B 中,每个医院 ID 出现不止一次。此外,table_B 将所有季度数据集中为一年(而不是 2004Q1、2004Q2.. 仅 2004 年)。

因此我想要的最终输出(最好作为新表)只是将 ACUTE_INDICATOR 添加到 Table_A 中

HOSPITAL_ID | YEAR_AND_QUARTER | ACUTE_INDICATOR | RECORD_ID....

提前请教,我是一个 SQL 婴儿,甚至不太确定要搜索什么答案。我最好的猜测是(伪):

INNER JOIN (SELECT B.ACUTE_INDICATOR)
ON A.HOSPITAL_ID = B.HOSPITAL_ID
WHERE LEFT(A.YEAR_AND_QUARTER,4) = B.YEAR_ALONE

非常感谢:)

【问题讨论】:

  • 你试过了吗? A.HOSPITAL_ID = B.HOSPITAL_ID AND LEFT(A.YEAR_AND_QUARTER,4) = B.YEAR_ALONE 上的内部连接 ​​B
  • 是的 - 这给了我比 table_A 更多的行(我假设是重复的)。我太缺乏经验了,不知道为什么。

标签: sql sql-server-2008


【解决方案1】:

这将为您创建新表:

SELECT
    a.HOSPITAL_ID,
    a.YEAR_AND_QUARTER,
    b.ACUTE_INDICATOR,
    a.RECORD_ID
INTO c
FROM
    a JOIN
    b ON a.HOSPITAL_ID = b.HOSPITAL_ID 
        AND LEFT(a.YEAR_AND_QUARTER, 4) = b.YEAR_ALONE

那么,如果您只想在该表中查询 Acute Care Facilities...

SELECT * FROM c WHERE ACUTE_INDICATOR = 'x'

【讨论】:

  • 这行得通,只是它给出了重复项,在 SELECT 之后添加了 DISTINCT 解决了这个问题。
【解决方案2】:

我会为此使用EXISTS

<your select from table A>
FROM TableA A
WHERE EXISTS (SELECT 1
              FROM TableB B
              WHERE A.HOSPITAL_ID = B.HOSPITAL_ID
              AND LEFT(A.YEAR_AND_QUARTER,4) = B.YEAR_ALONE
              AND b.Acute-Indicator = 'X')

如果表 B 中每个医院有 1000 个,这不会给您任何重复的行,但仍会以您想要的方式过滤。

【讨论】:

  • 这给了我正确的行数,但不会创建新表 - 已投票。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 2010-09-18
  • 2020-05-04
  • 1970-01-01
  • 1970-01-01
  • 2016-08-05
相关资源
最近更新 更多