SQL JOINS无效

时间:2015-04-22 09:06:55

标签: mysql

我有以下表格

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?

我尝试过两次加入牌桌但没有成功。

1 个答案:

答案 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;

在此期间,您可能希望为所有表使用别名来减少查询文本。