在连接中使用相同的表

时间:2015-06-10 15:32:35

标签: sql sql-server sql-server-2008

我正在使用Microsoft示例数据库和SQLZOO.net的问题来学习我的工作SQL。我坚持这个问题:

  

对于在达拉斯拥有'主办公室'的每位客户,显示的是AddressLine1   '航运'地址的'主办公室'和地址1 - 如果   没有送货地址留空。每个客户使用一行。

我如何使用同一张桌子?

3 个答案:

答案 0 :(得分:5)

您需要对表进行别名以加入自身。例如:

SELECT T1.Column1, T2.Column2, ... 
FROM Table1 AS T1
JOIN Table1 AS T2
    ON T1.Column1 = T2.Column1

答案 1 :(得分:1)

我浏览了AdventureWorks架构,我认为这是正确的方法。它确实涉及一个自连接,它通过将同一个表带入第二个别名(Person.Address为" oa"和" sa"下面)来实现。)自发货以来地址连接显然是可选的我会说,这实际上是问题的棘手部分,以获得正确的。

select ...
from
    Person.Address as oa /* office address */
    inner join Sales.CustomerAddress as ca on ca.CustomerID = oa.CustomerID
    left outer join Person.Address as sa /* shipping address*/
        on      ca.CustomerID = oa.CustomerID
            and sa.AddressTypeID = (
                select AddressTypeID
                from Person.AddressType
                where Name = 'Shipping'
            )
    where
        oa.AddressTypeID = (
            select AddressTypeID
            from Person.AddressType
            where Name = 'Main Office'
        ) and oa.City = 'Dallas'

答案 2 :(得分:0)

试试这个,你可以在这里看到自我关节的魔力 -
SELECT A1.Attribute1,A2.Attribute2 从表A1中, 表A2 其中A1.Attribute2 = A2.Attribute1

或者 SELECT A1.Attribute1,A2.Attribute2 从表A1中, 表A2 其中A1.Attribute1 = A2.Attribute2

在第二个中,您将看到两个属性的匹配值。