我正在努力获得作者的所有共同作者。第一列是出版物的ID。接下来的三列是作者的第一,中间和姓氏。
4 KARL K KWON
4 JACK A SMITH
4 DINESH SMITH
5 KARL K KWON
5 JACK B SMITH
6 AMEY SCHENCK BAILEY
6 KARL K KWON
6 DINESH SMITH
6 JACK SMITH
13 JACK SMITH
13 RONALD VALE
我想获得以下输出
JACK A SMITH {DINESH SMITH, KARL K KWON}
JACK B SMITH {KARL K KWON}
JACK SMITH {AMEY SCHENCK, KARL K KWON, DINESH SMITH, RONALD VALE}
我无法理解用于存储此新数据的结构以及如何获取它。任何建议/想法......
修改
这不是一个简单的发布ID组。例如,JACK SMITH在这里有2个出版物,其中有6个和13个。因此,需要找到这两个出版物的共同作者,并将其添加到JACK SMITH的共同作者集中。
答案 0 :(得分:0)
格式不完全相同,但它会吗?
修改尝试#2:
添加以下索引:
INDEX(pub_id, name)
INDEX(name, pub_id)
这是查询,我认为这种自我加入应该可以解决问题:
SELECT a.name AS Author,
GROUP_CONCAT(DISTINCT c.name SEPARATOR ', ') AS Co_authors
FROM ( SELECT DISTINCT name FROM tbl ) AS a -- Get the authors
JOIN tbl b ON (b.name = a.name) -- Get what they published
JOIN tbl c ON (c.pub_id = b.pub_id) -- Get the co-authors
GROUP BY a.name;
答案 1 :(得分:0)
这将返回ids和逗号分隔的作者列表
SELECT id, GROUP_CONCAT(CONCAT_WS(' ', firstName, middleName, lastName)) FROM table GROUP BY id
使用上面的表格加入表格
SELECT t.*, tGrouped.authors FROM table t
JOIN (SELECT id, GROUP_CONCAT(CONCAT_WS(' ', firstName, middleName, lastName)) as authors FROM table GROUP BY id) tGrouped ON t.id=tGrouped.id
最后,如果您不希望名称出现在作者列表中 - 请使用简单的REPLACE()