Problem pojawił się przy wyszukiwaniu zamienników w produkcji i sprowadza się łączenia tabel jak poniżej
Możliwe, że należy zastosować GROUP + ORDER BY oraz DISTINCT aby uzyskać coś w rodzaju excelowego UNIQUE ale zdecydowanie przekracza to moje obecne umiejętności.
(Proszę wybaczyć różne potknięcia. To mój pierwszy post na tym forum)
Nie kumam Twojego opisu w ogóle. A co NIE jest "unikalnego" w a i c ? Wyjaśnij lepiej.
@BlackBad: Fakt, może niepotrzebnie pisałem o tej unikalności i można to inaczej rozwiązać.
Produkt T1 w planach składa się z dwóch składników a i b. W montażu T2 zabrakło składnika b i zastąpiono go składnikiem c. Porównanie planu i wykonania przez łączenie powinno dać tabelę wynikową w rodzaju:
Kol1(Plan).. Kol2(Wykonanie)
a..................a
b..................NULL
NULL............c
(Czy jest gdzieś ściąga, jak ładniej pisać posty?)
Jeśli to jest faktycznie co potrzebujesz to będzie tak:
SELECT p.Klucz, p.Kol1, m.Kol2
from dbo.Plany p
LEFT JOIN dbo.Montaz m
on p.Klucz = m.Klucz
and p.Kol1 = m.Kol2
UNION
SELECT m.Klucz, p.Kol1, m.Kol2
from dbo.Plany p
RIGHT JOIN dbo.Montaz m
on p.Klucz = m.Klucz
and p.Kol1 = m.Kol2
Tu na Twoich danych: http://sqlfiddle.com/#!18/3f270/1
Dziękuję serdecznie! Tak, dokładnie o to chodziło. No i ta sieciowa platforma testowa - cudo.
Przepraszam, że nie podziękowałem od razu, ale zająłem się wprowadzaniem danych rzeczywistych i napotkałem problem.
LEFT JOIN działa prawidłowo, a RIGHT JOIN zwraca tylko rekord ze zgodnymi wartościami ( w przykładzie równość po AND).
Może podpowie Pan gdzie szukać przyczyny.
Nie bardzo rozumiem opisany problem. Podaj przykład danych dla jakich zwraca Ci złe wyniki. Najlepiej właśnie przygotowanej w http://sqlfiddle.com/
Ps. I tu na forum sobie nie "panujemy" - doceniam poprawność i d. wychowanie ale nie ma potrzeby tu na forum. Tutaj to ja jestem @BlackBad ;)