在一行中匹配不同的价值II

时间:2012-10-30 04:14:55

标签: mysql sql

这是前一个修订过的问题。由于范围发生了变化,我决定开一个新问题。

这就是我想要实现的目标。

在“作者”列中列出书籍作者的姓氏,首先列出作者的姓氏,然后在作者名单之后(在逗号之后)列出第二个任何;如果有第三位作者,请将其放在第二位作者姓名之后。书籍作者的顺序列在 au_ord 栏目中(1 =第一作者,2 =第二作者,3 =第三作者)。

知道如何在MYSQL输出中实现这个目标吗?

enter image description here

这些是源表。所需的输出是这样的:

enter image description here

2 个答案:

答案 0 :(得分:3)

这应该是您的第一个样本输出:

SELECT title_id, au_ord, au_lname
FROM title_authors
LEFT JOIN authors
ON authors.au_id = title_authors.au_id
WHERE title_id = 'TC7777'
ORDER BY au_ord;

这应该给出第二个:

SELECT title_id, GROUP_CONCAT(au_lname ORDER BY au_ord SEPARATOR ', ')
FROM title_authors
LEFT JOIN authors
ON authors.au_id = title_authors.au_id
GROUP BY title_id
HAVING title_id = 'TC7777';

答案 1 :(得分:2)

您只需要一个GROUP_CONCAT功能。

SELECT title_id, GROUP_CONCAT(au_lname ORDER BY au_ord)
FROM table
GROUP BY title_id

GROUP BY子句对所有单独(不同)标题进行分组,其上的GROUP_CONCAT连接其所有作者。这将列出所有标题及其相应的作者。如果au_lname来自另一个表而不是来自title_id表,那么您将必须使用适当的连接。我不确定你问题中的表名是什么。