【问题标题】:SQL Query to fetch record based on existing column value基于现有列值获取记录的 SQL 查询
【发布时间】:2018-01-24 11:53:44
【问题描述】:

我想编写 SQL 查询来检索以下数据。

Table1->ID_1 / ID_2由Table2的主键组成

基于此,在预期结果中需要 Value1 和 Value2。 在代码级别,我正在从 Table1 中检索信息,并通过迭代执行另一个查询来获取 Value1 / Value2 的记录。

我想编写 SQL 查询以一次尝试获取全部数据。

【问题讨论】:

  • 到目前为止你尝试过什么?考虑查找(INNER) JOIN 的语法。
  • 是的,我尝试过使用内连接(在 Table.ID_1 = Table2.ID 上),但不知道如何将其应用于多个列

标签: sql-server


【解决方案1】:

您可以在两个 id 列上将 table_1 与 table 2 连接两次:

select t1.*, 
    t2_1.value as value1,
    t2_2.value as value2
from table_1 t1
join table t2_1 on t1.id_1 = t2_1.id
join table t2_2 on t1.id_2 = t2_2.id;

如果 table_1 中的任何 id 列可以为空,则将内连接更改为左。比如:

select t1.*, 
    t2_1.value as value1,
    t2_2.value as value2
from table_1 t1
left join table t2_1 on t1.id_1 = t2_1.id
left join table t2_2 on t1.id_2 = t2_2.id;

【讨论】:

    【解决方案2】:

    试试这个工作示例:

    DECLARE @Table1 TABLE([User] VARCHAR(100),Data VARCHAR(100),ID_1 INT,ID_2 INT);
    INSERT INTO @Table1 VALUES('Admin','data',1,2)
                             ,('test','data',3,2) 
    
    DECLARE @Table2 TABLE(ID INT,Value VARCHAR(100));
    INSERT INTO @Table2 VALUES(1,'ABC')
                             ,(2,'PQR')
                             ,(3,'XYZ');  
    SELECT t1.[User]
          ,t1.Data
          ,t1.ID_1
          ,t2a.Value
          ,t1.ID_2
          ,t2b.Value
    FROM @Table1 AS t1
    LEFT JOIN @Table2 AS t2a ON t1.ID_1=t2a.ID
    LEFT JOIN @Table2 AS t2b ON t1.ID_2=t2b.ID
    

    结果

    User    Data    ID_1    Value   ID_2    Value
    Admin   data    1       ABC     2       PQR
    test    data    3       XYZ     2       PQR
    

    【讨论】:

      【解决方案3】:

      您只需加入 Table2 两次

      SELECT
          T1.[User],
          T1.[Data],
          T1.ID_1,
          Value1 = T2.Value,
          T1.ID_2,
          Value2 = T3.Value
          FROM Table1 T1
             INNER JOIN Table2 T2
                ON T1.ID_1 = T2.ID
             INNER JOIN Table2 T3
                ON T1.ID_2 = T3.ID
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-17
        • 1970-01-01
        • 2022-12-05
        相关资源
        最近更新 更多