Помогите с SQL запросом

Тема в разделе "Базы данных", создана пользователем bvb, 7 окт 2011.

Модераторы: latteo
  1. bvb

    bvb

    Регистр.:
    17 май 2009
    Сообщения:
    190
    Симпатии:
    34
    Между таблицами books и tags связь один-ко-многим, то есть у книги несколько тегов. В результате выполнения запроса
    Код:
    SELECT books.ID, books.name as bname, authors.name as aname, tags.name as tag FROM books 
    LEFT OUTER JOIN authors ON books.authorID = authors.ID 
    LEFT OUTER JOIN tags ON tags.bookID = books.ID
    появляются дублирующиеся строки (разница только в tag). Как сделать так, чтобы выборка содержала только одну строку с объединенными тегами?

    books
    -------------
    ID | name
    -------------
    1 | bname1

    authors
    -------------
    ID | name
    -------------
    1 | aname1

    tags
    --------------
    bookID | tag
    --------------
    1 | tag1
    1 | tag2

    Получить

    -------------------------------
    ID | bname | aname |tag
    -------------------------------
    1 | bname1 | aname1 |tag1,tag2
     
  2. Soul :)

    Soul :) Постоялец

    Регистр.:
    22 мар 2007
    Сообщения:
    86
    Симпатии:
    9
    добавьте в запрос GROUP BY и GROUP_CONCAT
     
  3. bvb

    bvb

    Регистр.:
    17 май 2009
    Сообщения:
    190
    Симпатии:
    34
    А можно подробнее? GROUP_CONCAT я использовал, но очень медленно выполнялся запрос, подозреваю что неверно составил. Кстати в таблицах tags и books по 50 тыс. записей.
     
  4. bajun

    bajun Постоялец

    Регистр.:
    26 окт 2011
    Сообщения:
    67
    Симпатии:
    3
    1-важен ли язык?
    2-books.authorID - а в табл books не указали это поле, как понимать?
    Возможно так, нужно пробовать:
    SELECT distinct books.ID
    ,books.name as bname
    ,authors.name as aname
    ,tags.name as tag
    FROM books, authors, tags
    WHERE books.authorID = authors.ID(+)
    AND books.ID = tags.bookID(+)
     
  5. fpinger

    fpinger

    Регистр.:
    11 май 2007
    Сообщения:
    253
    Симпатии:
    58
    А может проще два запроса (отдельно для книги, отдельно для тегов)? И по времени скорее всего выиграете.

    Кроме того ещё несколько авторов у книги бывает...