2012-10-30 17 views
1

这是上一个修订后的问题。自从范围发生变化以后,我决定提出一个新问题。在一行内匹配不同的值II

这就是我想要实现的。

在“作者”列中列出该作者的姓氏,该作者的姓氏将首先列出,后面(作者逗号后)是作者列出的第二个姓名如果有的话;如果有第三个作者,则将其放在第二个作者的名字后面。 au_ord列(1 =第一作者,2 =第二作者,3 =第三作者)列出书籍作者的顺序。

任何想法如何在MYSQL输出中实现这一点?

enter image description here

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

enter image description here

+0

这是上一个问题的链接http://stackoverflow.com/questions/13126011/matching-different-value-within-one-row/13126415#comment17849651_13126415 – ocinisme

+0

你可以发布样本值和所需的输出吗?这通常比文字描述更有帮助。 – nawfal

+0

发布花花公子!我希望现在更清楚。 – ocinisme

回答

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表,那么您将不得不使用适当的连接。我不确定你的问题中的表名是什么。

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'; 
+0

我不认为这里需要'SEPARATOR'关键字。 'GROUP_CONCAT'自动用逗号分隔你。 – nawfal

+0

@nawfal:您说得对,逗号是“GROUP_CONCAT”的默认分隔符。然而,在这个答案中,分隔符是一个逗号,后跟一个空格。 –