我正在使用Microsoft示例数据库和SQLZOO.net的问题来学习我的工作SQL。我坚持这个问题:
对于在达拉斯拥有'主办公室'的每位客户,显示的是AddressLine1 '航运'地址的'主办公室'和地址1 - 如果 没有送货地址留空。每个客户使用一行。
我如何使用同一张桌子?
答案 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
在第二个中,您将看到两个属性的匹配值。