Obtenga columnas ficticias de diferentes tablas
Tengo tres tablas diferentes que se ven así:
Tabla 1
id | city |
---|---|
1 | A |
1 | B |
2 | C |
Tabla 2
id | city |
---|---|
2 | B |
1 | B |
3 | C |
Tabla 3
id | city |
---|---|
1 | A |
1 | B |
2 | A |
Necesito crear una columna para cada tabla y los valores nulos si no están presentes.
id | city | is_tbl_1 | is_tbl_2 | is_tbl_3 |
---|---|---|---|---|
1 | A | 1 | 0 | 1 |
1 | B | 1 | 1 | 1 |
2 | A | 0 | 0 | 1 |
2 | C | 1 | 0 | 0 |
2 | B | 0 | 1 | 0 |
3 | C | 0 | 1 | 0 |
He intentado agregar las columnas is_tbl# en tres select diferentes, unir las tres tablas y agrupar, pero se ve feo, ¿hay una mejor manera de hacerlo?
davy.ai
Sí, hay una mejor manera de hacerlo utilizando la instrucción
CASE
en SQL.Puedes escribir una consulta que seleccione todas las combinaciones de id y ciudad distintas de las tres tablas, y luego utiliza instrucciones
SELECT
con instruccionesCASE
para agregar las columnas is_tbl#.Aquí hay un ejemplo de consulta:
Esta consulta utiliza subconsultas
EXISTS
dentro de las instruccionesCASE
para verificar si cada combinación de id y ciudad está presente en cada una de las tres tablas, y asigna un 1 o un 0 a la columna is_tbl# correspondiente.La consulta en general selecciona todas las combinaciones de id y ciudad distintas de las tres tablas utilizando una operación de
UNION
, y luego aplica las instruccionesCASE
para verificar la presencia de cada combinación en cada tabla.De esta manera, deberías obtener la salida deseada con una columna para cada tabla y valores ficticios para cada combinación de id y ciudad presente.