ms sql - początkujący - zwracanie wierszy nie posiadających relacji

0

Witam wszystkich :) Pierwszy post, mam nadzieję, że jakichś reguł nie łamię :) Mam problem i mam nadzieję, że pomożecie - na bank pomożecie bo to podstawy.

Chodzi o to, że mam 2 tabele np.:

Samochod
ID  Nazwa


Cecha
ID   ID_Samochod    NazwaCechy    WartoscCechy

Dla każdego samochodu może być kilka różnych cech (czyli NazwaCechy np. kolor, długość) o różnych wartościach (np. czerwony, czarny itd)

Chciałbym zwrócić listę wszystkich samochodów wraz z cechami (np. Kolor i Dlugosc) Problem w tym, że jak to robię to pomijane są pozycje dla których nie ma danej cechy.

Czyli wynik miałby wyglądać tak:

ID     Nazwa     Kolor     Dlugosc
1      BMW       Czarny    6238
2      VW        Szary
3      Nissan    Zółty     5039

Jeżeli to zrobię tak jak próbuję to wiersz nr 2 się nie pokaże (bo nie ma długości). A robię to mniej więcej tak:

SELECT Samochod.ID, Samochod.Nazwa, Cecha1.WartoscCechy as 'Kolor', Cecha2.WartoscCechy as 'Dlugosc'
FROM Samochod, Cecha as 'Cecha1', Cecha as 'Cecha2'
WHERE Cecha1.ID_Samochod = Samochod.ID AND Cecha1.NazwaCechy='Kolor' AND Cecha2.ID_Samochod = Samochod.ID AND Cecha2.NazwaCechy = 'Dlugosc'
1

Wydaje mi się że powinno coś takiego zadziałać.

Chociaż niestety nie mam jak tego zdebugować i sprawdzić :/

SELECT s.ID, s.Nazwa, C1.WartoscCechy as 'Kolor', C2.WartoscCechy as 'Dlugosc'
FROM Samochod as s
LEFT JOIN Cecha as C1 with (nolock) on C1.ID_Samochod = s.ID AND Cecha1.NazwaCechy='Kolor'
LEFT JOIN Cecha as C2 with (nolock) on C2.ID_Samochod = s.ID AND Cecha2.NazwaCechy='Dlugosc'

 
0

Działa rewelacyjnie :) Dzięki bardzo.

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