MS SQL - zapytanie z realacji 1 do wielu

0

Proszę o pomoc w następującym klasycznym zagadnieniu dot
Mam następujące encje:

  • 'Ksiazki';
  • 'Autor_Ksiazki';
    -'Autor';
    Tak więc 1 książka może mieć wielu autorów.
    W swojej aplikacji wyciągam dane o książkach i ich autorach. Gdy dana książka posiada wielu autorów, tworzy mi się odpowiednio tyle rekordów danej książki co autorów do niej przypisanych.
    Moim celem jest uzyskanie 1 rekordu dla jednej książki stąd mam pytanie jak można to zrealizować?

Np. czy da się w taki sposób aby wybierał się tylko jeden autor z wszystkich przypisanych do książki, albo wszyscy autorzy w jednym wierszu?

    SELECT 
        ks.ISBN,
        ks.tytul,
        ks.id_ksiazka,
        au.imie,
        au.nazwisko
    FROM 
        Ksiazki ks, Autorzy au, Ksiazka_Autor ka 
    WHERE 
        ks.id_autor = ka.id_ksiazka and
        au.id_autor = ka.id_autor
           GROUP BY
                       ks.ISBN,
        ks.tytul,
        ks.id_ksiazka,
        au.imie,
        au.nazwisko;
0

Rozumiem, że masz tabelę asocjacyjną ? Autor może napisać wiele książek, książka może być napisana przez wielu autorów. Ten Select zwraca Ci zawartość tabeli asocjacyjnej. Musiałbyś nałożyć dodatkowy warunek jeszcze aby dostać jakąś konkretną pozycję.

0

dla pokazania jednego jednego autora dla ksiazki:

    SELECT 
        ks.ISBN,
        ks.tytul,
        ks.id_ksiazka,
        au.imie,
        au.nazwisko
    FROM 
        Ksiazki ks left join (select id_ksiazka, min(id_autor) id_autor from Ksiazka_Autor group by id_ksiazka) ka on (ks.id_ksiazka=ka.id_ksiazka) left join Autorzy au on (ka.id_autor=au.id_autor) 
    ORDER BY
ks.tytul, au.nazwisko, au.imie, ks.isbn

dla pokazania wszystkich autorów w jednej lini należałoby napisać funkcję i ją wywoływać zamiast imie i nazwisko autora.

Pozdrawiam
Paweł Dmitruk

0

Dziękuję za pomoc :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0