MySQL条件搜索查询

时间:2015-03-05 04:22:15

标签: mysql conditional sql-search

我正在努力获得作者的所有共同作者。第一列是出版物的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的共同作者集中。

2 个答案:

答案 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()