2012-10-30 48 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」的默認分隔符。然而,在這個答案中,分隔符是一個逗號,後跟一個空格。 –