我遇到sql
查詢問題,我不確定我在做什麼錯誤。反正讓我解釋一下:使用GROUP_CONCAT的SQL查詢出現意外的結果
最初,這是原始查詢:
SELECT cl.*,
c.id,c.type,
c.firstname,
c.surname,
c.job,
c.company,
c.directorycompany_id,
dc.id, dc.name,
es.id FROM contactlist_contact cl
INNER JOIN contact c ON cl.contact_id = c.id
LEFT JOIN directorycompany dc ON dc.id = c.directorycompany_id
LEFT JOIN expertsection es ON es.id = c.expertsection_id
WHERE cl.contactlist_id = 36311
ORDER BY dc.surname
聲明獲取所有的從contactlist表的詳細其中ID爲X.它返回的信息是爲每個聯繫人一行在聯繫人列表中,以及他們工作的公司(目錄公司)信息以及有關聯繫人表中聯繫人的各種其他詳細信息。因此,信息看起來是這樣的:
contactlist_id contact_id id active id type firstname surname job company directorycompany_id id name id
36311 1939 316955375 1 1939 directory Joe Bloggs Deputy Editor 786 786 Herald People 0
36311 1935 316955374 1 1935 directory Jim Bloggs Advertising Manager 786 786 Herald People 0
36311 28034 316955373 1 28034 directory Jay Bloggs News Reporter 786 786 Herald People 0
我後來去,並試圖修改被要求上述SQL
作爲附加功能,但我已經看到不想要的結果。基本上,我想JOIN
3其他表
- directorycolumn
- directorysupplement
- directoryprogramme
的想法是,它會返回所有列,補充和方案,在接觸聯繫表也寫了。另外要指出的是,在某些情況下,一個聯繫人可能寫了多於一列,補充或程序,因此我理想地希望將其顯示在與聯繫人相同的行中,而不是複製行,所以我使用了GROUP_CONCAT()
函數。
這是修改後的SQL
SELECT cl.*,
c.id,
c.type,
c.firstname,
c.surname,
c.job,
c.company,
c.directorycompany_id,
dc.id, dc.name,
es.id,
GROUP_CONCAT(dirc.name) AS gcname,
GROUP_CONCAT(dirp.name) AS gpname,
GROUP_CONCAT(dirs.name) AS gsname
FROM contactlist_contact cl
INNER JOIN contact c ON cl.contact_id = c.id
LEFT JOIN directorycompany dc ON dc.id = c.directorycompany_id
LEFT JOIN expertsection es ON es.id = c.expertsection_id
LEFT JOIN directorycolumn dirc ON dirc.directorycontact_id = c.id
LEFT JOIN directoryprogramme dirp ON dirp.directorycontact_id = c.id
LEFT JOIN directorysupplement dirs ON dirs.directorycontact_id = c.id
WHERE cl.contactlist_id = 36311
ORDER BY dc.surname
這將返回:
contactlist_id contact_id id active id type firstname surname job company directorycompany_id id name id gcname gpname gsname
36311 28034 316955373 1 28034 directory Jay Bloggs News Reporter 786 786 Herald People 0 The Arts Scene,Farming \N \N
所以我的問題是,去哪裏其他2個結果走了,他們爲什麼不顯示?此外,爲什麼gcname中的信息顯示在這個聯繫人上,實際上它與聯繫人ID有關1939
也許增加一個'GROUP BY'子句? – hjpotter92
如果我用'GROUP BY'替換'ORDER BY',它只會返回一個結果。 – Javacadabra
我會建議'GROUP BY contact_id'作爲喬,吉姆和傑伊共用同一個姓氏,你不想只爲他們一行,對不對? – TheConstructor