Witam
Mam powiązane ze sobą relacje tak jak w załączniku. Potrzebuje sprawdzić te lokacje z tabeli Stock, które mają PalletId oraz BoxId oraz ten rekord z tabeli Pallet ma różne LocationId z tabeli Box. Tak wiem, że jest to pokręcone, ale w poniższych zapytaniach wiadomo mniej więcej o co chodzi.
Mój problem jest taki, że o ile udało mi się osiągnąć to co chcę, o tyle problem jest z wydajnością. Operacja 'nie jest równe' jest stosunkowo bardzo kosztowna. Wymyśliłem dwa zapytania - ale oba przy sprawdzaniu planu zapytania dają mi taki sam koszt.
SELECT *
from Stock s
where (Select LocationId from Pallet p where p.PalletId = s.PalletId) <> (Select LocationId from Box b where b.BoxId = s.BoxId)
SELECT *
from Stock s
inner join Pallet p on s.PalletId = p.PalletId
inner join Box b on b.BoxId = s.BoxId
where p.LocationId <> b.LocationId