我正在使用Microsoft数据库和来自SQLZOO.net的问题来学习我的工作。我被困在这个问题上:
对于在达拉斯拥有“主办公室”的每一个客户,请显示“主办公室”的AddressLine1和“船运”地址的AddressLine1 --如果没有送货地址,请将其留为空白。每个客户使用一行。
怎么用同一张桌子?
发布于 2015-06-10 15:34:27
您需要将表化名以连接到其本身。例如:
SELECT T1.Column1, T2.Column2, ...
FROM Table1 AS T1
JOIN Table1 AS T2
ON T1.Column1 = T2.Column1发布于 2015-06-10 16:08:20
我浏览了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'发布于 2015-06-11 07:48:29
试试这个,你可以在这里看到自我连接的魔力-
从表A1中选择A1.Attribute 1,A2.Attribute 2,表A2,其中A1.Attribute 2=A2.Attribute 1
或从表A1中选择A1.Attribute 1,A2.Attribute 2,表A2,其中A1.Attribute 1=A2.Attribute 2
在第二个属性中,您将看到两个属性的匹配值。
https://stackoverflow.com/questions/30760878
复制相似问题