我正在使用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.BusinessEntityID
和a.BusinessEntityID
与外键无关,即使两个BusinessEntityID
列都相同,但两者都不是外键另一个。这两个表之间有一个名为BusinessEntity
的联结表。
显然,这里有些东西我不明白。可能有一个简单的解释,我不知道。如果有人可以启发我,我将不胜感激。
答案 0 :(得分:2)
外键的目的是强制数据的引用完整性。如果父表中不存在指定的键,则强制您不能在子表中输入行。
在这种情况下,Person和BusinessEntityAddress表之间没有完整性,因此没有提供外键。完整性在BusinessEntity和BusinessEntityAddress之间 - 即如果BusinessEntity不存在,则不能拥有BusinessEntityAddress。