【问题标题】:SQL query to join several columns连接多个列的 SQL 查询
【发布时间】:2009-05-18 15:42:48
【问题描述】:

我正在尝试将 2 个表中的一些数据连接在一起,但在多个列上。这是一个例子:

来源

ID |描述| AAAA| BBBB|

Table2 表格

ID |正文| ID1 | ID2 | ID3 |

Table2 中的 ID1、ID2 和 ID3 是 Source 表中的 ID

我想做一个产生结果的查询:

Table2.Text,
Source.Desc(ID1),
Source.AAAA(ID1),
Source.Desc(ID2),
Source.AAAA(ID2),
Source.Desc(ID3),
Source.AAAA(ID3)

我猜这将是一个连接,但我无法正确使用语法......还是使用联合会更好?

【问题讨论】:

    标签: sql syntax join union


    【解决方案1】:

    您可以只使用多个连接,不是吗?例如:

    SELECT tb.Desc, s1.Desc, s1.AAAAA, s2.Desc, s2.AAAAA, s3.Desc, s3.AAAA
    FROM Table2 tb
        INNER JOIN Source s1 ON tb.ID1 = s1.ID
        INNER JOIN Source s2 ON tb.ID2 = s2.ID
        INNER JOIN Source s3 ON tb.ID3 = s2.ID
    

    【讨论】:

    • 附加:为了得到我需要的确切结果,我使用了左外连接,但这只是我的具体情况。
    【解决方案2】:

    您需要加入源表三次,每个 ID 一次。你也可以试试联合,看看哪个表现更好。

    这是一个糟糕的表格设计(应该标准化),如果可能的话,我建议您现在更改它。应该有一个相关的表,每个 id 都在一个单独的记录中,然后你可以加入一次,它会更有效,更容易编写代码,而且你不必在你需要的那一天更改表结构和所有查询ID4。

    【讨论】:

      【解决方案3】:

      如果不是所有 Source 表都填充在 Table2 中,这仍会为您提供部分结果:

      SELECT
          t.Desc, s1.Desc, s1.AAAAA, s2.Desc, s2.AAAAA, s3.Desc, s3.AAAA
          FROM Table2                t
              LEFT OUTER JOIN Source s1 ON t.ID1 = s1.ID
              LEFT OUTER JOIN Source s2 ON t.ID2 = s2.ID
              LEFT OUTER JOIN Source s3 ON t.ID3 = s2.ID
          WHERE t.ID=@YourIDHere
      

      【讨论】:

      • 这是我的场景中的实际情况
      【解决方案4】:

      三个连接应该可以解决问题:

      select A.*, coalesce(B1.Text,B2.Text,B3.Text,'') as Text
      from Source A
      inner join Table2 B1 on B1.ID1=A.ID
      inner join Table2 B2 on B2.ID2=A.ID
      inner join Table2 B3 on B3.ID3=A.ID
      

      【讨论】:

        猜你喜欢
        • 2012-04-27
        • 2014-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-17
        • 1970-01-01
        相关资源
        最近更新 更多