es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  ,

Answer

  1. Avatar for 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 instrucciones CASE para agregar las columnas is_tbl#.

    Aquí hay un ejemplo de consulta:

    SELECT id, city, 
        CASE WHEN EXISTS (SELECT * FROM table1 WHERE table1.id = t.id AND table1.city = t.city) THEN 1 ELSE 0 END AS is_tbl1,
        CASE WHEN EXISTS (SELECT * FROM table2 WHERE table2.id = t.id AND table2.city = t.city) THEN 1 ELSE 0 END AS is_tbl2,
        CASE WHEN EXISTS (SELECT * FROM table3 WHERE table3.id = t.id AND table3.city = t.city) THEN 1 ELSE 0 END AS is_tbl3
    FROM (
        SELECT id, city FROM table1
        UNION SELECT id, city FROM table2
        UNION SELECT id, city FROM table3
    ) t
    

    Esta consulta utiliza subconsultas EXISTS dentro de las instrucciones CASE 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 instrucciones CASE 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.

Comments are closed.