Mam tabeli, strasznie zaprojektowane (nie mój sposób na szczęście), który przechowuje dane w sposób podobny do następujących:gdzie tabela. * <> Tabela. * - Czy istnieje sposób na zrobienie czegoś takiego?
klawisz [], [lease_id], [building_name], ~ 20 więcej kolumn Dane
Może zostać i będzie używany jako leasingobiorca dla centrum i centrali. Zostałem poproszony o znalezienie wszystkich przypadków, w których dane w budynku dla dzierżawy nie pasują do danych w centrali dla tej samej dzierżawy.
Mogę to zrobić całkiem łatwo z samo łączeniem. Wyzwanie polega na tym, że istnieje około 20 kolumn do porównania i chociaż mógłbym je wpisać ręcznie, zastanawiałem się, czy istnieje lepszy sposób na zrobienie tego (co również oznaczałoby, że zapytanie może być używane w przyszłości, uwzględniając zmiany w tabeli).
W syntaxtically śmiesznej psuedo Code chcę zrobić coś podobnego do tego, co następuje zrobiłby gdyby było pracować:
select lp.*
from lease_proposal lp
inner join
(
select *
from lease_proposal lp2
where building_id = '001' -- assume 001 is head office for sake of example
) lp2
on lp2.lease_id = lp.lease_id
where lp.* <> lp2.*
To nie jest dostępne w SQL Server, zobacz: http://stackoverflow.com/questions/4826613/natural-join-in-sql-server – Codingo
To popchnęło moją wiedzę w górę - naprawdę świetny post, thank-you – Codingo
Pozostawienie "SELECT * FROM leasing_proposal INTERSECT" poza zapytaniem przyniosłoby takie same wyniki. 'INTERSECT' ogranicza tylko duplikaty wierszy, w których' building_id = '001'', jeśli takie istnieją. Następnie używasz wynikowego podzestawu, aby znaleźć wiersze, które nie są zgodne z innymi kryteriami, i nie będzie to oznaczało, że podzbiór zawierał duplikaty lub nie, ponieważ nadal chciałbyś, aby wiersze, które * nie są * w podzbiorze. –