[英]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.