使用主键连接两个表

问题描述 投票:0回答:1

我正在使用SQL Server Management Studio刷新我的T-SQL,并且有一个我无法找到答案的问题。我正在使用AdventureWorks2017数据库并且这个INNER JOIN语句完美地运行:

SELECT 
    FirstName, LastName, AddressLine1 Address, City, 
    StateProvinceCode, State, CountryRegionCode 
FROM 
    Person.Person p
INNER JOIN
    Person.BusinessEntityAddress a ON p.BusinessEntityID = a.BusinessEntityID
INNER JOIN
    Person.Address ON Address.AddressID a = a.AddressID
INNER JOIN
    Person.StateProvince s ON s.StateProvinceID = a.StateProvinceID
WHERE 
    CountryRegionCode = 'US' 

但是这里的交易是:p.BusinessEntityIDa.BusinessEntityID与外键无关,即使两个BusinessEntityID列都相同,但两者都不是另一个的外键。这两个表之间有一个名为BusinessEntity的联结表。

显然,这里有一些我不明白的东西。可能有一个我不知道的简单解释。如果有人可以启发我,我将不胜感激。

sql sql-server ssms
1个回答
2
投票

外键的目的是强制数据的引用完整性。如果父表中不存在指定的键,则强制您不能在子表中输入行。

在这种情况下,Person和BusinessEntityAddress表之间没有完整性,因此没有提供外键。完整性在BusinessEntity和BusinessEntityAddress之间 - 即如果BusinessEntity不存在,您就不能拥有BusinessEntityAddress。

© www.soinside.com 2019 - 2024. All rights reserved.