Pregunta

Tengo una tabla que tiene alrededor de 40 columnas. La única diferencia en los nombres de las columnas es que el pasado 20 de todo el comienzo con "B" antes del nombre de la columna. Esta tabla se utiliza para comparar. En otras palabras, comparar los datos de las primeras 20 columnas a los datos en los últimos 20 columnas.

Sé que esto es muy mal diseño, así que ¿cómo debe ser rediseñado esta tabla, por lo que sólo hay 20 columnas, sin embargo, todavía se pueden comparar los datos?

EDIT: si ayuda, también utilizamos estos datos para encontrar una cohorte emparejado

Tenga en cuenta también que el rendimiento es una preocupación principal aquí. Mediante la duplicación de las columnas de los datos de la Guía es extremadamente rápido.

Gracias!

¿Fue útil?

Solución

Dos arquitecturas posibles y una punta de consulta.

1) Construir su tabla con una columna "Tipo", y el uso que de la bandera de "primaria" frente a "alternativo". En su caso, "A" frente a "B" podría ser apropiado.

2) Construir una partición vertical, dos tablas idénticas (para los datos primarios y alternativos), que comparten una clave primaria común. (Si Id = 42 está en una tabla, que debe ser en el otro - menos que los datos "alternativo" es opcional, en cuyo caso no poblar la segunda tabla.) También opcionalmente, tiene una tercera tabla que rastrea todas las posible primaria llaves, junto con los datos que se sabe que siempre sean comunes a ambas tablas.

Consejo: Lea sobre SELECT ... excepto y SELECT ... se cruzan. Se ejecutan de forma preocupante rápidamente, y son idea para comparar todas las columnas y filas entre dos conjuntos de datos de las diferencias (excepto) y partidos (intersección). Se puede utilizar esta bastante fácilmente con cualquiera de las dos estructuras, y que trabajaría con su código existente así (aunque podría ser más molesto para escribir la consulta).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top