[英]Unexpected results from SQL Query using 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
該語句從id為X的contactlist表中獲取所有詳細信息。它返回的信息是contactlist表中每個聯系人的一行,以及有關他們工作的公司(directorycompany)的信息以及有關該聯系人的各種其他詳細信息從聯系表。 因此,信息如下所示:
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個表
其想法是,它將返回聯系人列表中的聯系人也編寫的所有列,補充和程序。 另外要指出的是,在某些情況下,某個聯系人可能編寫了多於1列,補充或程序,因此,理想情況下,我希望將其顯示在與該聯系人相同的行中,而不是復制行,因此我使用了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_CONCAT,它將顯示正確的記錄,因為使用此函數時,您應該具有GROUP BY子句。 當前,它將所有記錄視為一個組。
如果您在gcname中查找的值是多個,那是正確的。
Group_concat是mysql聚合函數的一部分。 這意味着它將所有相等的值組合到一行中,在您的情況下,所有三列都具有相同的值,這就是為什么只得到一個結果的原因。 您希望使用group_concat有什么結果?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.