[英]3 table left outer join doesn't work with subquery
簡要說明...我有 4 張桌子。 “聯系人”(每個人的列表,唯一 ID)、contact_phones(每個聯系人的多個電話號碼,加入 contact_id)和contact_communication(每次我們與此聯系人交談時,加入 contact_id)和學校(a學校列表,加入schools.school_id = contacts.contact_id)。
我需要什么:我需要查找一所單獨的學校。 對於那所學校,我需要一份去那里的每個人的名單,他們的主要電話號碼,以及我們與他們的最后一次聯系(如果有的話)。
問題是,如果我們沒有與他們溝通,他們就不會出現在列表中。 如果我去掉“WHERE”子句中的“AND”語句,那么我得到的通信記錄不止一個。 我只想要最新的通訊記錄,但我想要所有的聯系人。 但有些聯系人沒有通訊記錄。
這是我的查詢:
SELECT c.id,
c.f_name,
c.l_name,
c.address1,
c.address2,
c.city,
c.state,
c.zip,
c.tel,
c.school_id,
c.email,
ct.tel,
cc.date,
cc.reason,
cc.result,
cc.caller
FROM contacts AS c
LEFT OUTER JOIN contact_phones AS ct ON c.id = ct.contact_id
LEFT OUTER JOIN contact_communication AS cc ON c.id = cc.contact_id
WHERE school_id = '$schoolId' AND
cc.id IN (SELECT MAX(id) FROM contact_communication WHERE contact_id = c.id)
ORDER BY cc.date DESC
問題是,這個查詢只給我最新的通信(這就是我想要的),但不會列出沒有通信的聯系人。
我已經在這呆了3天。 有小費嗎?
謝謝!!
(PS:如果需要,我會編輯並提供更多信息。)
編輯答案(謝謝,ysrb)正在改變我的 where 子句:
SELECT c.id,
c.f_name,
c.l_name,
c.address1,
c.address2,
c.city,
c.state,
c.zip,
c.tel,
c.school_id,
c.email,
ct.tel,
cc.date,
cc.reason,
cc.result,
cc.caller
FROM contacts AS c
LEFT OUTER JOIN contact_phones AS ct ON c.id = ct.contact_id
LEFT OUTER JOIN contact_communication AS cc ON c.id = cc.contact_id
WHERE school_id = '$schoolId' AND
(cc.id IN (SELECT MAX(id) FROM contact_communication WHERE contact_id = c.id) OR cc.id IS NULL)
ORDER BY cc.date DESC
嘗試:
SELECT c.id,
c.f_name,
c.l_name,
c.address1,
c.address2,
c.city,
c.state,
c.zip,
c.tel,
c.school_id,
c.email,
ct.tel,
cc.date,
cc.reason,
cc.result,
cc.caller
FROM contacts AS c
LEFT OUTER JOIN contact_phones AS ct ON c.id = ct.contact_id
LEFT OUTER JOIN contact_communication AS cc ON c.id = cc.contact_id
WHERE school_id = '$schoolId' AND
(cc.id = (SELECT MAX(id) FROM contact_communication WHERE contact_id = c.id) OR cc.ID IS NULL)
ORDER BY cc.date DESC
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.