Semana 63 - Administración
¡Descubriendo uniones que causan revuelo!
Todos nos hemos encontrado con esa molesta unión que se multiplica inesperadamente o simplemente se vuelve loca. Anteriormente, profundizábamos en nuestros conjuntos de datos, tratando de identificar al culpable. Ahora, diseñemos una función para agilizar este trabajo de detective.
Su desafío esta semana: diseñar una función que tome un ID de consulta y identifique cualquier unión dentro de ella que produzca más filas que la proporción 1:1 anticipada. En pocas palabras, si una combinación combina 10 filas desde la izquierda y 80 desde la derecha, pero da como resultado más de 80 filas, su función debería resaltar tales discrepancias.
--Schema creationcreate or replace schema week_63;--T1 creationCREATE TABLE t1 (value CHAR(1));INSERT INTO t1SELECT 'a' FROM (SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10) AS temp1UNION ALLSELECT 'b' FROM (SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12 UNION ALL SELECT 13 UNION ALL SELECT 14 UNION ALL SELECT 15 UNION ALL SELECT 16 UNION ALL SELECT 17 UNION ALL SELECT 18 UNION ALL SELECT 19 UNION ALL SELECT 20) AS temp2UNION ALLSELECT 'c' FROM (SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12 UNION ALL SELECT 13 UNION ALL SELECT 14 UNION ALL SELECT 15 UNION ALL SELECT 16 UNION ALL SELECT 17 UNION ALL SELECT 18 UNION ALL SELECT 19 UNION ALL SELECT 20 UNION ALL SELECT 21 UNION ALL SELECT 22 UNION ALL SELECT 23 UNION ALL SELECT 24 UNION ALL SELECT 25 UNION ALL SELECT 26 UNION ALL SELECT 27 UNION ALL SELECT 28 UNION ALL SELECT 29 UNION ALL SELECT 30) AS temp3UNION ALLSELECT 'd' FROM (SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12 UNION ALL SELECT 13 UNION ALL SELECT 14 UNION ALL SELECT 15 UNION ALL SELECT 16 UNION ALL SELECT 17 UNION ALL SELECT 18 UNION ALL SELECT 19 UNION ALL SELECT 20) AS temp4;-- Create table t2 and insert one 'b' valueCREATE TABLE t2 (value CHAR(1));INSERT INTO t2 (value) VALUES ('b');-- Create table t3 and insert ten 'c' valuesCREATE TABLE t3 (value CHAR(1));INSERT INTO t3SELECT 'c' FROM (SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10) AS temp;-- Create table t4 and insert one 'd' valueCREATE TABLE t4 (value CHAR(1));INSERT INTO t4 (value) VALUES ('d');
La consulta que nos gustaría que comprobaras:
SELECT *FROM t1LEFT JOIN t2 ON t1.value = t2.valueLEFT JOIN t3 ON t1.value = t3.valueLEFT JOIN t4 ON t1.value = t4.value;
El resultado de su función debería ser similar a este:
¡Buena suerte!