Relacja wiele do wiele - zapytanie sql

0

Siemka,

Pytanie pewnie było już kilka razy, jednak nic sensownego nie znalazłem.
Chodzi mi o następująca sprawę, dla przykładu napiszę tabele

Parent
IDParent Name
1001 Adam
1002 Ela
1003 Zuza

ParentChild
FParentID FKidsID
1001 1
1001 2
1002 1
1002 2

Kids
KidID Name
1 Artur
2 Sara
3 Zosia

Dobra i teraz chciałbym w zapytaniu wpisać id rodzica i żeby wyświetliło mi imiona jego dzieci
zrobiłem to tak
Select Dziecko.Name
FROM Kids
i tutaj teraz nie wiem jaki warunek
coś z inner join (ale to raczej do dołączania tabel)
z where nie działa, robiłem Rodzice.IDParent=1001 (w From musiałem dopisać tą tabele) a i tak wywalaliło mi wszystkie imiona dzieci

Proszę o pomoc :(, jak coś nie jasno napisałem to proszę o uwagę

0

W składni MySQLowskiej coś takiego powinno dać radę:

SELECT
  p.`name` AS `Imie rodzica`,
  GROUP_CONCAT(p2.`name`) AS `Imiona dzieci`

FROM
  `people` p

LEFT JOIN
  `people` p2 ON
    p2.`parent_id` = p.`id`

Nie wiem niestety jak konkretnie w przypadku SQL Servera.

0

Nie wiem czy do końca rozumiem bo te nazwy trochę robią zamieszanie, dwa razy wykorzystywana jest tabela people ?
Odnosząc to naszego przypadku to
SELECT
R.Name,
Kids.Name

FROM
Kids
LEFT JOIN
Rodzice R ON
R.IDParent=1001
??
Ogólnie teraz zauważyłem ze wcześniej trochę te tabele nie rozpisały się tak jak chciałem i wyszedł chaos, poprawiłem już

0

Ach, rozumiem - w takim wypadku robisz joina najpierw na tę tabelę łączącą (rodzice_dziecko), a potem na drugą (dzieci), czyli w sumie powinieneś mieć dwa złączenia.

0

Już sobie poradziłem, wypiszę może dwa sposoby którymi udało się uzyskać rezultat (może komuś się przyda)
Pierwszy sposób to:

Select Kids.NameKid, Kids.KidId
FROM Kids
Where Kids.KidId IN (
SELECT ParentChild.FKidsID
FROM ParentChild
WHERE ParentChild.FParentID=1001
)

Drugi z łączeniem tabel

SELECT K.*
FROM Kids K
INNER JOIN ParentChild Ph ON K.KidId = Ph.FKidsID
WHERE Ph.FParentID=1001

Jak ktoś ma jeszcze jakies ciekawe sposoby to walic :D

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