SQL połączenie wyników

0

Witam
Nie jestem pewien czy dobrze opisałem temat.
Mam bazę w mysql a w niej tabele np.

filmy (id_film, tytul)

gatunki (id_gatunek, gatunek_text)

filmy_gatunki (id_film_gatunek, id_film, id_gatunek)

teraz potrzebuje uzyskać efekt taki

filmy:
1 | gladiator
2 | Znaki
itp..

gatunki:
1 | historyczny
2 | fantazy;
3 | komedia
itp....

filmy_gatunki:

1 | 1 | 1
2 | 1 | 2
3 | 2 | 3
4 | 2 | 2

teraz jak zrobić select żeby dostać wynik w postaci:

1 | gladiator | historyczny, fantazy |
2 | Znaki | komedia, fantazy

Czy to jest w ogóle możliwe żeby tak złączyć rekordy z bazy
Może macie pomysł jak jednym zapytaniem wyciągnąć takie dane?

Mam nadzieję że jasno opisałem problem.

0

Jednym? Nie ma takiej mozliwości bo chcesz uzyskać rekordy które mają zupełnie różną ilość i typy atrybutów.

0

tak myslalem ale postanowilem zapytac dla pewnosci
dzieki za odpowiedz

0

Wystarczy napisać prostą funkcję:

CREATE FUNCTION dbo.fn_Gatunki
(
  @id_filmu int
)
RETURNS varchar(100)
AS
BEGIN
  DECLARE @gatunki varchar(100);
  SET @gatunki = '';

  SELECT @gatunki = @gatunki + g.gatunek_text + ',' 
  FROM filmy_gatunki fg
  INNER JOIN gatunki g ON g.id_gatunek = fg.id_gatunek
  WHERE fg.id_film = @id_filmu;
  
  SET @gatunki = SUBSTRING(@gatunki, 1, LEN(@gatunki)-1);
  
  RETURN(@gatunki);
END;

i już można dostać to co chcesz w jednym zapytaniu niezależnie od ilości gatunków:

SELECT f.id, f.tytul, dbo.fn_gatunki(f.id_filmu)
FROM filmy f;

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