Frage

Ich habe eine Tabelle, die rund 40 Spalten. Der einzige Unterschied in den Spalten Namen ist, dass die letzten 20 alle mit „B“ vor dem Spaltennamen starten. Diese Tabelle wird für den Vergleich verwendet. Mit anderen Worten, zu vergleichen, um die Daten in den ersten 20 Spalten die Daten in den letzten 20 Spalten.

Ich weiß, das ist sehr schlechtes Design, so wie soll diese Tabelle neu gestaltet werden, so dass es nur 20 Spalten, aber wir können immer noch die Daten vergleichen?

EDIT: wenn es hilft, wir diese Daten auch verwenden, um eine abgestimmte Kohorte

zu finden

Beachten Sie auch, dass die Leistung der Hauptanliegen ist es hier. Durch die Spalten dupliziert die Daten bekommen ist extrem schnell.

Danke!

War es hilfreich?

Lösung

Zwei mögliche Architekturen und eine Abfrage Spitze.

1) Erstellen Sie Ihre Tabelle mit einer Spalte „Typ“, und verwenden, die Flagge „primäre“ vs. „alternate“. In Ihrem Fall "A" gegen "B" könnte angemessen sein.

Baue

2) eine vertikale Trennwand, zwei identische Tabellen (für primäre und alternative Daten), die ein gemeinsamer Primärschlüssel. (Wenn Id = 42 in einer Tabelle ist, muss es in der anderen - es sei denn „alternate“ Daten optional ist, wobei in diesem Fall nicht über die zweite Tabelle füllen.) Ebenfalls optional eine dritte Tabelle, die Spuren alle möglichen primären Tasten, zusammen mit allen Daten, die sie immer auf beiden Tabellen gemeinsam sein bekannt ist.

Tipp: Lesen Sie auf SELECT up ... except und SELECT ... INTERSECT. Sie laufen erschreckend schnell und sind Idee für den Vergleich alle Spalten und Zeilen zwischen zwei Datensätze für Unterschiede (ausgenommen) und Streichhölzer (intersect). Sie können mit einem der beiden Strukturen dies ziemlich leicht bedienen, und es würde auch mit Ihrem vorhandenen Code arbeiten (obwohl es verspielter sein könnte, die Abfrage zu schreiben).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top