首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL条件搜索查询

问MySQL条件搜索查询
EN

Stack Overflow用户
提问于 2015-03-05 04:22:15
回答 2查看 161关注 0票数 0

我想找一个作家的所有合著者。第一列是出版物的id。接下来的三列是作者的第一、中间和姓氏。

代码语言:javascript
复制
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

我想得到以下输出

代码语言:javascript
复制
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个ids为6和13的出版物,因此需要找到这两个出版物的共同作者,并将其添加到JACK SMITH的合著者集合中。

EN

回答 2

Stack Overflow用户

发布于 2015-03-05 05:19:31

这不是完全相同的格式,但它会吗?

编辑尝试#2:

添加以下索引:

代码语言:javascript
复制
INDEX(pub_id, name)
INDEX(name, pub_id)

这是一个查询,我认为这个自连接应该可以做到:

代码语言:javascript
复制
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;
票数 0
EN

Stack Overflow用户

发布于 2015-03-10 07:07:30

这将返回ids和逗号分隔的作者列表。

代码语言:javascript
复制
SELECT id, GROUP_CONCAT(CONCAT_WS(' ', firstName, middleName, lastName)) FROM table GROUP BY id

用上面的一张加入桌子

代码语言:javascript
复制
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()。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28869962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档