2013-08-30 12 views
1

我有這樣的查詢:的ResultSet的多行合併爲一個線

SELECT DISTINCT 
     obl_books.book_id, 
     obl_books.long_title, 
     obl_books.short_title, 
     obl_authors.first_name 
FROM 
     obl_books, 
     obl_authors, 
     books_authors 
WHERE 
     obl_books.book_id = books_authors.book_id 
    AND 
     obl_authors.author_id = books_authors.author_id 
    AND 
     obl_books.short_title = 'SQL' 

這讓我對每個作者2點獨立的行。我想這樣在一個單行像這樣:

Book1| SQL REFERENCE | author1 | author2 | author3 

我怎樣才能直接在SQL查詢或通過做一些ResultSet結果?請指導。請告訴我,沒有任何PLSQL機制。

+0

你使用哪種RDBMS? – oddparity

+0

我使用mysql mysql – xyz

回答

0

取決於其RDBMS,但你可以嘗試

SELECT DISTINCT obl_books.book_id||obl_books.long_title|| etc... 

或查找 'CONCAT()' 在幫助

+0

但我如何將作者ID連接到自己 – xyz

1

如果您使用的是MySQL試試這個:

SELECT DISTINCT 
     obl_books.book_id, 
     obl_books.long_title, 
     obl_books.short_title, 
     GROUP_CONCAT(obl_authors.first_name, ',') 
ETC... 

變化無論你想要的分隔符(逗號)

0
  • 使用JOIN而不是舊的SQL-89隱式連接WHERE語法
  • 取出DISTINCT
  • 添加GROUP BY
  • 使用GROUP_CONCAT()來連接在一列中的所有名稱:

    SELECT 
         b.book_id, 
         b.long_title, 
         b.short_title, 
         GROUP_CONCAT(a.first_name 
            ORDER BY a.first_name 
            SEPARATOR ', ' 
            ) AS first_names 
    FROM 
         obl_books AS b 
        JOIN 
         books_authors AS ba 
          ON b.book_id = ba.book_id 
        JOIN 
         obl_authors AS a 
          ON a.author_id = ba.author_id 
    WHERE 
         b.short_title = 'SQL' 
    GROUP BY 
         b.book_id, 
         b.long_title, 
         b.short_title ;