这是上一个修订后的问题。自从范围发生变化以后,我决定提出一个新问题。在一行内匹配不同的值II
这就是我想要实现的。
在“作者”列中列出该作者的姓氏,该作者的姓氏将首先列出,后面(作者逗号后)是作者列出的第二个姓名如果有的话;如果有第三个作者,则将其放在第二个作者的名字后面。 au_ord列(1 =第一作者,2 =第二作者,3 =第三作者)列出书籍作者的顺序。
任何想法如何在MYSQL输出中实现这一点?
那些是源表。所需的输出是这样的:
这是上一个修订后的问题。自从范围发生变化以后,我决定提出一个新问题。在一行内匹配不同的值II
这就是我想要实现的。
在“作者”列中列出该作者的姓氏,该作者的姓氏将首先列出,后面(作者逗号后)是作者列出的第二个姓名如果有的话;如果有第三个作者,则将其放在第二个作者的名字后面。 au_ord列(1 =第一作者,2 =第二作者,3 =第三作者)列出书籍作者的顺序。
任何想法如何在MYSQL输出中实现这一点?
那些是源表。所需的输出是这样的:
所有你需要的是一个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
表,那么您将不得不使用适当的连接。我不确定你的问题中的表名是什么。
这应该给你的第一个样本输出:
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';
我不认为这里需要'SEPARATOR'关键字。 'GROUP_CONCAT'自动用逗号分隔你。 – nawfal
@nawfal:您说得对,逗号是“GROUP_CONCAT”的默认分隔符。然而,在这个答案中,分隔符是一个逗号,后跟一个空格。 –
这是上一个问题的链接http://stackoverflow.com/questions/13126011/matching-different-value-within-one-row/13126415#comment17849651_13126415 – ocinisme
你可以发布样本值和所需的输出吗?这通常比文字描述更有帮助。 – nawfal
发布花花公子!我希望现在更清楚。 – ocinisme