Domanda

Ho una tabella che ha circa 40 colonne. L'unica differenza nei nomi colonne è che l'ultimo 20 iniziano tutti con "B" prima del nome della colonna. Questa tabella viene utilizzata per il confronto. In altre parole, confrontare i dati nei primi 20 colonne per i dati degli ultimi 20 colonne.

So che questo è molto cattiva progettazione, così come si deve questa tabella essere riprogettato, in modo che ci sono solo 20 colonne, ma possiamo ancora confrontare i dati?

EDIT: se aiuta, usiamo anche questi dati per trovare una corrispondenza di coorte

Si noti inoltre che le prestazioni è di preoccupazione principale qui. Duplicando le colonne della ottenere dei dati è estremamente veloce.

Grazie!

È stato utile?

Soluzione

Due possibili architetture e una punta di query.

1) Costruisci la tua tabella con una colonna "Type", e l'uso che per la bandiera "primario" vs "alternate". Nel tuo caso, "A" vs "B" potrebbe essere appropriata.

2) Costruire una partizione verticale, due tabelle identiche (per i dati primari e si alternano), che condividono una chiave primaria comune. (Se Id = 42 è in una tabella, deve essere nell'altro - meno dati "alternate" è opzionale, nel qual caso non popolano la seconda tabella.) Inoltre opzionalmente, hanno una terza tabella che tutte le tracce possibili primaria chiavi, insieme con i dati che si caratterizza per essere sempre comune ad entrambe le tabelle.

Suggerimento: leggere su SELEZIONA ... tranne e SELECT ... intersecano. Corrono preoccupante in fretta, e sono idea per il confronto di tutte le colonne e le righe tra i due set di dati per le differenze (tranne) e partite (Intersezione). È possibile utilizzare questo abbastanza facilmente con una delle due strutture, e sarebbe lavorare con il codice esistente, come pure (anche se potrebbe essere fussier di scrivere la query).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top