Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MS SQL] Rekurencja + quadra inner join
maxslawek
post 2.02.2013, 16:03:39
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 2.02.2013

Ostrzeżenie: (0%)
-----


Witam!
Od jakiegoś czasu walczę z problemem dotyczącym rodowodów. A dokładniej tworzę mini aplikację w której posiadam m.in. następujące tabele:

Golab - wszystkie gołębie, nie tylko nasze, ale i na potrzeby rodowodów
GolabNasz - wszystkie gołębie, które są nasze
Rasa - tabela słownikowa
Barwa - tabela słownikowa

Jeśli chodzi o sam inner join z tabelami GolabNasz/Rasa/Barwa - wszystko ładnie śmiga, zero problemów. Cały zamysł niestety kończy mi się w momencie jakiejkolwiek próby odwołania rekurencyjnego w tabeli Golab.

Składa się ona z następujących pól:
ID_Golab
PelnyNumerObraczki
ID_Rasa
ID_Barwa
ID_GolabOjciec
ID_GolabMatka

Rekurencja występuje przy ID_GolabOjciec -> ID_Golab oraz ID_GolabMatka ->ID_Golab.
Chciałbym stworzyć zapytanie, w którym otrzymam połączone zapytanie z inner joinami + PelnyNumerObraczki Matki i PelnyNumerObraczki Ojca. Tylko w jaki sposób to zrobić... Jeśli chodzi o same quadra join to wstępnie wygląda to tak:
Kod
SELECT ID_Golab, PelnyNumerObraczki, Rasa, Barwa, ID_GolabOjciec, ID_GolabMatka, Plec from (Golab
INNER JOIN Rasa ON Rasa.ID_Rasa = Golab.ID_Rasa)
    INNER JOIN Barwa ON Barwa.ID_Barwa = Golab.ID_Barwa
        INNER JOIN GolabNasz ON Golab.ID_Golab = GolabNasz.ID_GolabNasz
            INNER JOIN Plec ON Plec.ID_Plec = GolabNasz.ID_Plec

Kod
        
SELECT     ID_Golab, PelnyNumerObraczki, Rasa, Barwa, ID_GolabOjciec, ID_GolabMatka, Linia, Plec
FROM  Rasa, Barwa, GolabNasz, Golab, Plec
WHERE Rasa.ID_Rasa=Golab.ID_Rasa AND Barwa.ID_Barwa = Golab.ID_Barwa AND GolabNasz.ID_GolabNasz = Golab.ID_Golab AND Plec.ID_Plec = GolabNasz.ID_Plec


Jeszcze muszę uzupełnić resztę danych z tabeli GolabNasz, ale to już są zmiany kosmetyczne - Prawdziwy problem to ta rekurencja by możnabyło wypisać NumerObrączki ojca i matki ... jakieś sugestie ?
Go to the top of the page
+Quote Post
mmmmmmm
post 3.02.2013, 17:32:43
Post #2





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

Ostrzeżenie: (0%)
-----


Jaki problem?
  1. SELECT Golab.ID_Golab, Golab.PelnyNumerObraczki, Rasa.Rasa, Barwa.Barwa, Golab.ID_GolabOjciec, Ojciec.PelnyNumerObraczki, Golab.ID_GolabMatka, Matka.PelnyNumerObraczki, Plec.Plec FROM (Golab
  2. INNER JOIN Rasa ON Rasa.ID_Rasa = Golab.ID_Rasa)
  3. INNER JOIN Barwa ON Barwa.ID_Barwa = Golab.ID_Barwa
  4. INNER JOIN GolabNasz ON Golab.ID_Golab = GolabNasz.ID_GolabNasz
  5. INNER JOIN Plec ON Plec.ID_Plec = GolabNasz.ID_Plec
  6. INNER JOIN Golab Matka ON Matka.ID_Golab = GolabNasz.ID_GolabMatka
  7. INNER JOIN Golab Ojciec ON Ojciec.ID_Golab = GolabNasz.ID_GolabOjciec
Go to the top of the page
+Quote Post
maxslawek
post 7.02.2013, 14:10:05
Post #3





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 2.02.2013

Ostrzeżenie: (0%)
-----


Dzięki za podpowiedź wink.gif Twoje rozwiązanie nie działało w pełni ze względu na INNER JOIN`y zamiast LEFT JOIN i małe błędy w nazwach tabel, ale i tak pozwoliło mi to na ogarnięcie tematu wink.gif Jeszcze raz z góry dziękuję!
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 20.04.2024 - 00:16