我遇到了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表中每个联系人的行以及他们工作的公司(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列,补充或程序,因此我理想地希望在与联系人相同的行中显示它,而不是复制行,所以我使用了{{ 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
所以我的问题是,其他2个结果在哪里消失了,为什么它们没有显示?还有为什么gcname中的信息是为这个联系人显示的,实际上它与id为1939的联系人有关
答案 0 :(得分:1)
如果删除GROUP_CONCAT,它将显示正确的记录,因为当您使用此函数时,您应该有GROUP BY子句。目前,它将所有记录视为一个组。
如果你看gcname中的值是多个,这是正确的。
答案 1 :(得分:1)
Group_concat是mysql aggregate functions的一部分。这意味着它将所有相等的值组合成一行,在您的情况下,所有三列具有相同的值,这就是为什么您只得到一个结果。你期望使用group_concat会得到什么结果?