MS SQL - zapytanie z realacji 1 do wielu

MS SQL - zapytanie z realacji 1 do wielu
A1
  • Rejestracja:ponad 15 lat
  • Ostatnio:ponad 10 lat
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?

Kopiuj
	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;

KA
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 10 lat
  • Postów:91
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:

Kopiuj
	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

A1
  • Rejestracja:ponad 15 lat
  • Ostatnio:ponad 10 lat
0

Dziękuję za pomoc :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.