1

我有一个这样的查询:

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 机制。

4

3 回答 3

1

如果您使用的是 MySQL,请尝试以下操作:

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

用你想要的任何东西更改分隔符(逗号)

于 2013-08-30T13:13:05.367 回答
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 ;
    
于 2013-08-30T13:28:20.340 回答
0

取决于哪个rdbms,但你可以试试

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

或在帮助中查找“Concat()”

于 2013-08-30T12:52:55.407 回答