MS SQL - zapytanie z realacji 1 do wielu

Odpowiedz Nowy wątek
2011-09-29 19:41
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;

Pozostało 580 znaków

2011-09-29 20:22
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ę.


Pozostało 580 znaków

2011-09-29 23:06
paweld
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

Pozostało 580 znaków

2011-09-30 09:38
0

Dziękuję za pomoc :)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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