没有公共键的SQL联接表

没有公共键的SQL联接表,sql,sql-server,join,Sql,Sql Server,Join,SQL新手。我正在与AdventureWorks 2012合作,试图熟悉SQL server。无法连接不共享公共密钥的表。这能做到吗 如果您熟悉AdventureWorks DB,我将尝试返回名称FirstName、MIddleName、LastName、AddressType和AddressLine1、AddressLine2、City、State、PostalCode的地址组合,但它从3个不同的表中提取,并且它们不共享任何可以将它们链接在一起的键。尝试以下方法: select t1.firs

SQL新手。我正在与AdventureWorks 2012合作,试图熟悉SQL server。无法连接不共享公共密钥的表。这能做到吗


如果您熟悉AdventureWorks DB,我将尝试返回名称FirstName、MIddleName、LastName、AddressType和AddressLine1、AddressLine2、City、State、PostalCode的地址组合,但它从3个不同的表中提取,并且它们不共享任何可以将它们链接在一起的键。

尝试以下方法:

select t1.firstname, t1.middlename, t1.lastnme,
       t2.addresstype,
       t3.addresslin1, t3.addresslin2, t3.city
from table1 t1, table2 t2, table3 t3;
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

使用UNION ALL连接它们,或者如果应该跳过重复项,则可以使用UNION

如果两个表不共享任何公用键,请确保退出第三个表,作为这两个表之间的桥梁


例如,表A和表C可能没有任何公用键。但在数据库中,第三个表B可以与表A和表C连接。因此,使用表B,您可以按照设计的方式将表A和表C逻辑地组合在一起。

它们可能没有直接键,但它们是相关的:您必须学习如何导航外键以使用原来的模型预定的看看SQL 2008附带的数据模型。尤其要注意靠近中心的米色部分

Person通过BusinessEntity和BusinessEntityAddress链接到address,因此您的查询需要加入这些表以获得所需的信息。因此,您的查询看起来有点像这样:

select t1.firstname, t1.middlename, t1.lastnme,
       t2.addresstype,
       t3.addresslin1, t3.addresslin2, t3.city
from table1 t1, table2 t2, table3 t3;
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来测试它,但这应该会给你一个基本的想法。您必须遵循这些键,否则您将无法获得所需或预期的数据。

您可以向我们展示这些表,它们有哪些列吗?这将生成一个t1*t2*t3值表,我认为这不是一个好主意,特别是在大型表上。这实际上不起作用,因为OP声明他们要从不同的表中获取大量字段,因此他们可能从每个表中获得不同数量的字段和类型。