Zmiana ID z tabeli powiązanej na nazwę

0

Witam serdecznie

Mam nastepującą strukturę w bazie

Tabela: Wpisy
ID_wpisy
Tresc
Czas
ID_zadania (klucz obcy do tabeli Zadania)

Tabela: Zadania
ID_Zadania
Nazwa_Zadania
ID_Status (klucz obcy do tabeli Status)

Tabela: Status
ID_Status
Nazwa_Status

Tabela: Link (Tabela służy do powiązania Zadania z podzadaniem)
ID_Link
Zrodlo (kolumna wskazuje na ID w tabeli Zadania wskazując na ZADANIE)
Cel )kolumna wskazuje na ID w tabeli Zadania wskazuje na PODZADANIE)

Dane w bazie:

Tabela Zadania:

1 Zakupy 3
2 Sprzątanie 3
3 Sklep spożywczy 3
4 SKlep meblowy 3
5 Sypialnia 3
6 Kuchnia 3

Tabela Status:
1 Otwarte
2 W trakcie
3 Gotowe

Tabela Wpisy:

1 "Zakup chleba i masla" 1h 1
2 "Zakup szafeczki" 1h 1
3 "Odkurzania" 2h 2
4 "Zmywanie naczyn" 3h 2

Tabela Link:
1 1 3
2 1 4
3 2 5
4 2 6

Mam następujące zapytanie:

SELECT wpisy.tresc, wpisy.czas, zadanie.nazwa_zadania, status.nazwa_status, Link.Zrodlo FROM Wpisy
INNER JOIN zadanie ON zadanie.id_zadania = wpisy.Id_zadania
INNER JOIN Status ON status.id_status ON zadanie.ID_Status
INNER JOIN Link ON Link.Zrodlo = Zadania.ID_Zadania

Otrzymuje następujące:

Zakup chleba i masla 1h Sklep Spożywczy Gotowe 1
Zakup szafeczki 1h Sklep Meblowy Gotowe 1
Odkurzanie 2h Sypialnia Gotowe 2
Zmywanie naczyń 3h Kuchnia Gotowe 2

Ostania kolumna zawiera ID z tabeli LINK
Wynik zapytania to wpisy w odpoiwednich PODZADANIACH, W jaki sposób zmodyfikować zapytanie, aby zamiast ostatniej kulumny zawierającej ID, otrzymać zawartość kolumny "zadanie.nazwa", które będzie wskazywać na nazwę ZADANIA, z którym PODZADANIE jest powiązane

Czyli chciałbym otrzymać:
Zakup chleba i masla 1h Sklep Spożywczy Gotowe Zakupy
Zakup szafeczki 1h Sklep Meblowy Gotowe Zakupy
Odkurzanie 2h Sypialnia Gotowe Sprzątanie
Zmywanie naczyń 3h Kuchnia Gotowe Sprzątanie

1

Dołącz drugi raz tabelę zadanie, czyli:

SELECT wpisy.tresc, wpisy.czas, z1.nazwa_zadania, status.nazwa_status, Link.Zrodlo, z2.nazwa_zadania as podzadanie FROM Wpisy
INNER JOIN zadanie AS z1 ON z1.id_zadania = wpisy.Id_zadania
INNER JOIN Status ON status.id_status ON z1.ID_Status
INNER JOIN Link ON Link.Zrodlo = z1.ID_Zadania
LEFT JOIN zadanie AS z2 ON Link.Cel = z2.ID_Zadania
 
0

Dzięki wielkie, dokładnie tego mi było potrzeba.

0

Analizuję te zapytanie i strukturę i utknąłem w jednym miejscu. Dlaczego po złączeniu

INNER JOIN zadanie ON zadanie.id_zadania = wpisy.Id_zadania

i wywołaniu:

SELECT zadanie.nazwa_zadania

Zakup chleba i masla 1h Sklep Spożywczy Gotowe 1
Zakup szafeczki 1h Sklep Meblowy Gotowe 1
Odkurzanie 2h Sypialnia Gotowe 2
Zmywanie naczyń 3h Kuchnia Gotowe 2

pojawiają się u Ciebie pola 'Sklep spożywczy', 'Sypialnia' itd.?

Wydaje mi się, że zapytanie powinno zwrócić coś takiego (biorąc pod uwagę, że do wartości źródło w naszym przypadku przypisane są po 2 wartości cel) z wartościami właśnie 'sprzątanie' lub 'zakupy':

TRESC CZAS NAZWA_ZADANIA NAZWA_STATUS ZRODLO


Zmywanie naczyn 3h Sprzatanie GOTOWE 2
Odkurzanie 2h Sprzatanie GOTOWE 2
Zmywanie naczyn 3h Sprzatanie GOTOWE 2
Odkurzanie 2h Sprzatanie GOTOWE 2
zakup szafeczki 1h Zakupy GOTOWE 1
Zakup chleba i masla 1h Zakupy GOTOWE 1
zakup szafeczki 1h Zakupy GOTOWE 1
Zakup chleba i masla 1h Zakupy GOTOWE 1

Z kolei rozwiązanie zaproponowane przez sadama wyświetla u mnie:

TRESC CZAS NAZWA_ZADANIA NAZWA_ZADANIA NAZWA_STATUS ZRODLO


Zakup chleba i masla 1h Zakupy Sklep spozywczy GOTOWE 1
zakup szafeczki 1h Zakupy Sklep spozywczy GOTOWE 1
Zakup chleba i masla 1h Zakupy Sklep meblowy GOTOWE 1
zakup szafeczki 1h Zakupy Sklep meblowy GOTOWE 1
Odkurzanie 2h Sprzatanie Sypialnia GOTOWE 2
Zmywanie naczyn 3h Sprzatanie Sypialnia GOTOWE 2
Odkurzanie 2h Sprzatanie Kuchnia GOTOWE 2
Zmywanie naczyn 3h Sprzatanie Kuchnia GOTOWE 2

Niby ok, ale np. wartości w krotce: "Zmywanie naczyn" i "sprzatanie" i "sypialnia", nie brzmi trochę bez sensu? Na pewno o to chodzi? Nie wiem, może ja gdzieś się masakrycznie machnąłem, na pewno u Ciebie wyświetla poprawnie? Potrafiłby ew. ktoś wskazać błąd w moim rozumowaniu?

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