SQL新手。我正在与AdventureWorks 2012合作,试图熟悉SQL服务器。无法连接不共享公用密钥的表。可以这样做吗?
如果您熟悉AdventureWorks数据库,我正在尝试返回名称(FirstName,MIddleName,LastName),AddressType和Address(AddressLine1,Address Line2,City,State,PostalCode的组合),但是3个不同的表,它们不共享任何可以将它们链接在一起的密钥。
答案 0 :(得分:1)
如果两个表不共享任何公共密钥,请确保退出第三个表,作为这两个表之间的桥梁。
例如,表A和表C可能没有任何公共密钥。但是在数据库中,可以有第三个表B,它能够与表A以及表C一起加入。因此,使用表B,您可以将表A和表C结合在一起(逻辑上就是它的方式设计)。
答案 1 :(得分:1)
他们可能没有直接密钥,但它们是相关的:您必须学习如何导航外键以按预期使用模型。查看SQL 2008附带的this diagram of the AdventureWorks数据模型。特别注意Person部分(中心附近的一种米色)。
Person通过BusinessEntity和BusinessEntityAddress链接到地址,因此您的查询需要连接这些表以获取所需的信息。所以,你的查询看起来有点像这样:
SELECT .pFirstName, p.MiddleName, P.LastName, at.[Name], a.AddressLine1, a.AddressLine2, a.City, a.State, a.PostalCode
FROM Person p
INNER JOIN BusinessEntity be
ON be.BusinessEntityId = p.BusinessEntityId
INNER JOIN BusinessEntityAddress bea
ON bea.BusinessEntityId = be.BusinessEntityId
INNER JOIN AddressType at
ON at.AddressTypeId = bea.AddressTypeId
INNER JOIN Address a
ON a.AddressId = bea.AddressId
我没有让AdventureWorks亲自测试它,但这应该给你基本的想法。您必须按照键,否则您将无法获得您想要或期望的数据。
答案 2 :(得分:0)
尝试这样的事情:
select t1.firstname, t1.middlename, t1.lastnme,
t2.addresstype,
t3.addresslin1, t3.addresslin2, t3.city
from table1 t1, table2 t2, table3 t3;
答案 3 :(得分:0)
select <fields list> from table1
union all
select <the same fields list> from table2
union all
select <the same fields list> from table3
使用UNION ALL加入它们(或者如果你应该跳过重复项,你可以使用UNION)