【问题标题】:How to link from Table1 to Table2 in SQL where the value returned from Table2 is based on an index value from Table1?如何在 SQL 中从 Table1 链接到 Table2,其中从 Table2 返回的值基于 Table1 中的索引值?
【发布时间】:2020-10-15 21:36:57
【问题描述】:

我对 SQL 相当陌生,并且能够从单个数据库中的单个表运行查询。但是现在我需要从另一个数据库中的另一个表中访问代码及其真实值,我不知道该怎么做。它可能涉及到 JOIN 命令,但我无法使其工作。

这是我的数据摘要:

DB1.Table1

Procedure Code  Procedure Description   PIC Code ID
----------------------------------------------------
10005001        INJECTION 20ML          707
10005002        INJECTION 30ML          707
20008850        BLOOD CBC               254

DB2.Table2

PIC Code ID PIC Code    PIC Code Description
---------------------------------------------
707         250         PHARMACY
707         250         PHARMACY
254         300         LABORATORY

我的查询从 DB1.Table1 开始,但我能够链接到 DB2.Table2 并返回 PIC 代码列中的值而不是 PIC 代码 ID。

所以输出类似于:

Procedure Code  Procedure Description   PIC Code
-------------------------------------------------
10005001        INJECTION 20ML          250
10005002        INJECTION 30ML          250
20008850        BLOOD CBC               300

PIC 代码 ID 是在运行时使用的索引,而不是最终用户可以识别的真实代码。

【问题讨论】:

  • 在 S.O. 上有很多这样的问题。以及大量的示例答案。我建议你看看stackoverflow.com/a/21085546/3950497。下次你应该提供一个到目前为止你已经尝试过的例子,这样人们就可以为你指出正确的方向。

标签: sql join inner-join


【解决方案1】:

你似乎想要一个简单的join

select t1.procedure_code, t1.procedure_description, t2.pic_code
from table1 t1
inner join table2 t2 
    on t2.pic_code_id = t1.pic_code_id

您的数据在table2 中显示重复,但我不确定这是否是您真正拥有的,因为您的问题没有提到这一点 - 所以查询无法处理。但如果你真的需要:

select t1.procedure_code, t1.procedure_description, t2.pic_code
from table1 t1
inner join (select distinct pic_code_id, pic_code from table2) t2 
    on t2.pic_code_id = t1.pic_code_id

【讨论】:

  • OP 问题中的数据有重复,您承认发布的答案无效?
  • @BryanDellinger:我不明白你的意思。答案解释了第一个查询的基本原理,并解决了第二个查询中的重复问题。
【解决方案2】:

首先您应该从 table2 中删除重复项,然后您可以将结果与 table1 连接。

select
     t1.Procedure_Code
    ,t1.Procedure
    ,t1.Description
    ,t2.PIC_Code
from DB1.Table1 t1
left join (
    select
        PIC_Code_ID
        ,max(PIC_Code) as PIC_Code
    from DB2.Table2
    group by
        PIC_Code_ID
    ) t2 on t1.PIC_Code_ID = t2.PIC_Code_ID

【讨论】:

    【解决方案3】:

    关联子查询怎么样。

    select Procedure_Code, Procedure_Description,
    (select Max(PIC_Code)
     from Table2 b
     where a.PIC_Code_ID = b.PIC_Code_ID
    ) as PIC_Code
    from Table1 a 
    

    在这里运行小提琴https://www.db-fiddle.com/f/sUAjQdMVyyhqwF6okdaiVQ/0

    【讨论】:

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