Ich habe eine Tabelle, schrecklich entworfen (nicht mein Glück zu tun), dass speichern Daten in einer Art und Weise ähnlich wie die folgenden:wo Tabelle. * <> Tabelle. * - Gibt es eine Möglichkeit, so etwas zu tun?
[key], [lease_id], [BUILDING_NAME], ~ 20 weiteren Spalten Daten
Ein lease_id kann und wird für ein Zentrum und eine Zentrale existieren. Ich wurde gebeten, alle Instanzen zu finden, in denen Daten in einem Gebäude für einen Mietvertrag nicht mit den Daten in der Zentrale für denselben Mietvertrag übereinstimmen.
Ich kann dies ganz einfach mit einem Self Join tun. Die Herausforderung hier ist, dass es etwa 20 Spalten zu vergleichen gibt und obwohl ich jeden manuell eingeben konnte, fragte ich mich, ob es eine bessere Möglichkeit gibt, dies zu tun (was auch bedeuten würde, dass die Abfrage in Zukunft unter Berücksichtigung von Tabellenänderungen verwendet werden könnte)).
In syntaxtically lächerlich psuedo Code- ich etwas will ähnlich wie tun, was folgende tun würde, wenn sie zur Arbeit waren:
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.*
Dies ist in SQL Server nicht verfügbar ist, finden Sie unter: http://stackoverflow.com/questions/4826613/natural-join-in-sql-server – Codingo
Das ist mein Wissen noch ein Stück geschoben - wirklich großen Beitrag, Dankeschön – Codingo
Wenn Sie 'SELECT * FROM lease_proposal INTERSECT' aus der Abfrage herauslassen, erhalten Sie die gleichen Ergebnisse. 'INTERSECT' unterdrückt nur doppelte Zeilen, wobei' building_id = '001'', falls vorhanden, sind. Sie verwenden dann die resultierende Teilmenge, um Zeilen zu finden, die nicht mit einem anderen Kriterium übereinstimmen, und es würde nicht anzeigen, ob die Teilmenge Duplikate enthielt oder nicht, weil Sie immer noch Zeilen wünschen, die in der Teilmenge * nicht * sind. –