1

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

这就是我想要实现的。

在“作者”列中列出图书作者的姓氏,首先列出作者的姓氏,然后(在逗号之后)如果有的话,将列出第二位作者的姓氏;如果有第三作者,则在第二作者姓名之后。一本书的作者顺序列在au_ord列中(1=第一作者,2=第二作者,3=第三作者)。

知道如何在 MYSQL 输出中实现这一点吗?

在此处输入图像描述

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

在此处输入图像描述

4

2 回答 2

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';
于 2012-10-30T08:24:02.983 回答
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表,那么您将必须使用适当的连接。我不确定您的问题中的表名是什么。

于 2012-10-30T08:36:03.847 回答