我正在尝试将多个表连接到表中的相同值。所以我有表ActivityPartyBase,它有一个PartyId列。我想将ContactBase表中的COntactId和AccountBase表中的PartyId和AccountId连接到PartyId。这是我正在使用的代码,它不会返回任何内容。如果我只加入一个它的工作。有什么想法吗?
SELECT DISTINCT Appointment.ScheduledStart, ActivityPartyBase.ActivityId
, Appointment.ActivityId AS Expr1, ActivityPartyBase.ScheduledStart AS Expr2
, Appointment.Subject, ActivityPartyBase.PartyId, ContactBase.ContactId
, ContactBase.FullName
FROM Appointment
INNER JOIN ActivityPartyBase
ON Appointment.ActivityId = ActivityPartyBase.ActivityId
INNER JOIN AccountBase ON ActivityPartyBase.PartyId = AccountBase.AccountId
LEFT OUTER JOIN ContactBase ON ActivityPartyBase.PartyId = ContactBase.ContactId
ORDER BY Appointment.ScheduledStart DESC
答案 0 :(得分:3)
鉴于此......
FROM Appointment
INNER JOIN ActivityPartyBase ON Appointment.ActivityId = ActivityPartyBase.ActivityId
INNER JOIN AccountBase ON ActivityPartyBase.PartyId = AccountBase.AccountId
LEFT OUTER JOIN ContactBase ON ActivityPartyBase.PartyId = ContactBase.ContactId
...你声明这有效(?)......
FROM Appointment
INNER JOIN ActivityPartyBase ON Appointment.ActivityId = ActivityPartyBase.ActivityId
/* INNER JOIN AccountBase ON ActivityPartyBase.PartyId = AccountBase.AccountId */
/* LEFT OUTER JOIN ContactBase ON ActivityPartyBase.PartyId = ContactBase.ContactId */
由于LEFT OUTER JOIN
不会明确地导致没有结果,因此这不是您的问题。由于INNER JOIN
会导致您看到的内容,因此我们只能推断出连接条件不正确。
换句话说,ActivityPartyBase.PartyId
不等于AccountBase.AccountID
。
答案 1 :(得分:3)
您的内部联接正在过滤掉结果,因为联接表上没有相应的记录。我总是发现最简单的调试方法是选择*"并使用所有LEFT JOIN。这将显示表格中与主表相关的所有内容;你应该能够查看你的数据并找出那个表格在那时很容易丢失的记录。
要确认这只是命名约定不匹配,
INNER JOIN AccountBase ON ActivityPartyBase.PartyId = AccountBase.AccountId
PartyID和AccountId是PK / FK吗?
答案 2 :(得分:0)
您确定内部联接中的所有三个表中都有数据吗?
答案 3 :(得分:0)
我猜你的一个INNER JOIN没有拿起任何数据。从所有3个连接开始,然后一次取出其中一个连接,看看哪个连接断开了。然后查看您的连接条件,看看哪个列没有返回记录。
答案 4 :(得分:0)
对我而言,好像这些表是相互排斥的。如果它是离子表,则不是其他(设计不佳)。尝试左连接到两个表。