我幾次遇到過這個問題,我不知道如何解決它。我有一個查詢需要訪問同一個表兩次,以挑出兩個不同的人:一個顧問和客戶聯繫人。在SQL Server中搜索兩次表
顧問+客戶查詢看起來像這樣
select
CRM7.contact.contact_id as CustomerID,
CRM7.contact.name + ' ' + CRM7.person.firstname + ' ' + CRM7.person.LASTNAME as CustomerName,
CRM7.person.firstname + ' ' + CRM7.person.lastname as ConsultantName,
CRM7.udcontactsmall.long08 as WriteLic,
CRM7.udcontactsmall.long17 as ReadLic,
CRM7.udcontactsmall.long09 as HasMaint,
CRM7.udlist.name as BCVer
from
CRM7.contact,
CRM7.udcontactsmall
left join
CRM7.associate on CRM7.udcontactsmall.long11 = CRM7.associate.associate_id
left join
CRM7.person on CRM7.associate.person_id = CRM7.person.person_id
left join
CRM7.udlist on CRM7.udcontactsmall.long07 = CRM7.udlist.UDList_id
where
CRM7.contact.category_idx = '2' and
CRM7.contact.userdef_id = CRM7.udcontactsmall.udcontactsmall_id
order by
CRM7.contact.name
和得到每個客戶的接觸看起來像這樣
SELECT
C.NAME+' Kontakt '+ P.FIRSTNAME+' '+P.LASTNAME AS CONTACT
FROM
CRM7.PERSON P
LEFT OUTER JOIN
CRM7.CONTACT C ON P.CONTACT_ID = C.CONTACT_ID
WHERE
C.CATEGORY_IDX IN ('2','5')
AND P.RETIRED = 0
ORDER BY
C.NAME, P.LASTNAME, P.FIRSTNAME
Dataset中的一個:
http://oi61.tinypic.com/2j66cjq.jpg
如何我得到一個查詢,它返回顧問爲客戶和客戶聯繫?
不要如果您確實需要LEFT JOIN,請將這些右側表條件放在WHERE子句中。 (如果你這樣做,你會得到內連接行爲。)移動到ON子句以獲得true LEFT JOIN執行。 – jarlh
好奇你爲什麼在同一個表中存儲顧問和客戶 – Takarii
@jarlh - 正如你所看到的,where子句在用左連接連接的表上沒有任何條件,所以雖然你的語句是真的,但它不會在這種情況下有任何影響。 – Adish