【问题标题】:Join Based on the Same Column基于同一列连接
【发布时间】:2011-10-05 01:27:43
【问题描述】:

我有两张表,例如 TableA 和 TableB。

TableA 的架构:

     UoMID
     UoMName

表 B 的架构:

     ItemID
     ItemName
     UoMID
     D1_UoMID
     D2_UoMID
     D3_UoMID

在这里,我想根据 TableA 中的 UoMID 和 TableB 中的 UoMID、D1_UoMID、D2_UoMID 和 D3_UoMID 来加入这两个表。 我想检索以下列:

     ItemName, UoMName, D1_UoMName, D2_UoMName and D3_UoMName

如何检索上述列?以及如何识别对应的 UoMID、D1_UoMID、D2_UoMID 和 D3_UoMID 的 UoMName?

【问题讨论】:

    标签: sql sql-server-2005 sql-server-2008 sql-server-2000 inner-join


    【解决方案1】:

    使用aliases,可以多次join同一张表,区分不同join的结果。试试这个:

    SELECT
        ItemName,
        d0.UoMName,
        d1.UoMName as D1_UoMName,
        d2.UoMName as D2_UoMName,
        d3.UoMName as D3_UoMName
    from TableB tb
    join TableA d0 on d0.UoMID = tb.UoMID
    join TableA d1 on d1.UoMID = tb.D1_UoMID
    join TableA d2 on d2.UoMID = tb.D2_UoMID
    join TableA d3 on d3.UoMID = tb.D3_UoMID;
    

    【讨论】:

      【解决方案2】:
      SELECT ta.UoMName, ta1.UoMName, ta2.UoMName ta3.UoMName 
      FROM TableA AS ta, TableA AS ta1, TableA AS ta2, TableA AS ta3, TableB AS tb
      WHERE ta.UoMID = tb.UoMID
      AND ta.UoMID = tb.UoMID
      AND ta1.UoMID = tb.D1_UoMID
      AND ta2.UoMID = tb.D2_UoMID
      AND ta3.UoMID = tb.D3_UoMID
      

      如果您想多次使用同一个表,则必须为表指定别名。

      【讨论】:

        【解决方案3】:
        SELECT 
             b.ItemName,
             (SELECT a1.UoMName FROM TableA a1 WHERE a1.UoMID = b.UoMID) as UoMName,
        (SELECT a2.UoMName FROM TableA a2 WHERE a2.UoMID = b.D1_UoMID) as D1_UoMName,
        (SELECT a3.UoMName FROM TableA a3 WHERE a3.UoMID = b.D1_UoMID) as D3_UoMName,
        (SELECT a4.UoMName FROM TableA a4 WHERE a4.UoMID = b.D1_UoMID) as D3_UoMName,
        FROM TableB b
        

        希望这可行

        【讨论】:

        • Yuk... 该查询的性能确实很差。您不需要进行子选择!
        猜你喜欢
        • 1970-01-01
        • 2019-02-04
        • 2017-12-15
        • 1970-01-01
        • 1970-01-01
        • 2021-09-30
        • 1970-01-01
        • 2018-10-17
        • 2021-12-22
        相关资源
        最近更新 更多