我有以下表格
1. tblJobs
JobID int primary key
JobTypeID int
JobClientID int
JobStaffID int
....
2. tblContacts
ContactID int primary key
ContactName varchar
....
3. tblJobTypes
TypeID int primary key
TypeName varchar
我可以使用这个SQL从这些表中选择数据......
SELECT tblContacts.ContactName, tblContacts.ContactID,
tblJobs.JobID, tblJobs.JobTypeID, tblJobs.JobClientID, tblJobs.JobStaffID,
tblJobTypes.* FROM (tblJobs LEFT JOIN tblJobTypes ON tblJobs.JobTypeID = tblJobTypes.TypeID) LEFT JOIN tblContacts ON tblJobs.JobClientID = tblContacts.ContactID;
SQL中的示例行...
| ContactName| ContactID | JobID | JobTypeID | JobClientID | JobStaffID |TypeID | TypeName |
| Mr Contact | 290 | 341 | 3 | 290 | 202 | 3 | Enquiry |
如您所见,此SQL将tblJobs.JobClientID连接到tblContacts.ContactID(290)。 这就是我得到tblContacts.JobStaffID(202)。
的方法如何修改SQL以获取tblContacts.ContactName?
我尝试过两次加入牌桌但没有成功。
答案 0 :(得分:2)
假设JobStaffID
是与tblContacts.ContactID
相关的外键,你认为你需要加入tblContacts
表两次是正确的 - 但是你必须给它不同的别名每个联接都是这样的:
SELECT
c1.ContactName as ClientName, c1.ContactID as ClientID,
c2.ContactName as StaffName, c2.ContactID as StaffID,
j.JobID, j.JobTypeID, j.JobClientID, j.JobStaffID,
jt.TypeID, jt.TypeName
FROM tblJobs j
LEFT JOIN tblJobTypes jt ON j.JobTypeID = jt.TypeID
LEFT JOIN tblContacts c1 ON j.JobClientID = c1.ContactID
LEFT JOIN tblContacts c2 ON j.JobStaffID = c2.ContactID;
在此期间,您可能希望为所有表使用别名来减少查询文本。