2015-04-22 2 views
0

У меня есть следующие таблицыSQL JOINS не работает

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?

Я пробовал дважды входить в столы, но безуспешно.

+3

Что вы имеете в виду? Вы получили tblContacts.ContactName в своем 'SELECT', как есть. – HoneyBadger

+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; 

И хотя вы можете использовать псевдонимы для всех таблиц, чтобы уменьшить текст запроса.

+0

Ответ от jpw поставил меня на правильный путь. Здесь говорится, чтобы избежать комментариев, таких как «Спасибо», так как я могу «проголосовать» за этот ответ? –