tipos - SQL Server: combinación de combinaciones EXTERIOR e INTERIOR
sql like multiple values (8)
Claro que puedes hacer la unión en la misma consulta: -
FROM TableA a
INNER JOIN Table b ON a.TableA_ID = b.TableA_ID
LEFT OUTER JOIN Table c ON a.TableA_ID = c.TableA_ID
Tengo 3 tablas y tengo que unir internamente la Tabla A con la Tabla B, pero una izquierda externa entre la Tabla A y la Tabla C.
¿Puedo combinar combinación externa e interna en la misma consulta? Puedo anidar consultas y lograr el resultado deseado, pero no puedo hacer ambas uniones en la misma consulta. Parece que en otros lenguajes SQL, el orden de unión es importante. ¿Es este el caso en SQL Server también?
Ok, aquí está el escenario.
Considera 3 tablas. Tabla A, Tabla F, Tabla D.
Necesitaré que el conjunto de registros contenga todas las filas en D independientemente de si existe en F (después de que se haya unido con A). Entonces, una combinación externa viene a la mente. Lo que necesitaría es:
- Primero haga una unión interna entre A y F para obtener un conjunto (puede ser un conjunto nulo)
- A continuación, realice una combinación externa con el conjunto de registros en (1) con D
De su seguimiento, parece que quiere una unión interna "condicional".
Esencialmente, un "Si A y B tienen un registro, INNER JOIN to C".
Sin embargo, es probable que se encuentre con el problema donde INNER JOIN en su consulta no muestra registros donde A no tiene registros asociados a B o C. Si están en el mismo ''alcance'', INNERS siempre se ejecutará, usted puede '' Condicionalmente, haga que se ejecuten según su orden.
Debe utilizar dos uniones IZQUIERDA y filtrar los registros que no desea o, alternativamente, utilizar una Vista para determinar el alcance de la UNIÓN INTERNA.
Ex. A LEFT JOIN vw_MyView ON A.ID = vw_MyView.A_ID
Donde MyView tiene las tablas B y C con INNER JOIN. Esto permitirá que INNER JOIN se ejecute dentro de la vista, y luego puede LEFT JOIN a los resultados.
El problema puede no ser específicamente la unión (Anthony le mostró cómo hacer lo que nos describió). Recuerde que las personas a menudo tienen problemas para usar las uniones izquierdas porque intentan poner algo en la cláusula where que hace referencia a la tabla en el lado derecho de la únase y conviértalo de una unión externa a una unión interna (a menos que esté buscando aquellos registros donde el segundo campo de la tabla es nulo, lo que le da los registros en la primera tabla y no en la secundaria).
Podríamos ayudarlo mejor si decimos que el código real que estaba utilizando no estaba produciendo los resultados deseados, así como algunos datos de muestra y resultados de muestra.
Sí, puede hacer ambas cosas, es la misma consulta, y sí, el orden es importante.
Si entiendo correctamente quieres algo como esto:
select
*
from
a
left outer join c
inner join b on c.bID = b.ID
on a.cID = c.ID
Para mi caso, necesitaba poner alias de tabla para que mi consulta funcionara correctamente:
SELECT * FROM ("purchased_items" p1
INNER JOIN "purchase_orders" po1 ON (po1."id" = p1."purchase_order_id")) AS p4
LEFT OUTER JOIN (purchased_items p2
INNER JOIN "purchase_orders" po2 ON (po2."id" = p2."purchase_order_id")) AS p5
ON (p4.item_variant_id = p5.item_variant_id AND p4.delivery_date < p5.delivery_date)
WHERE p5.delivery_date IS NULL AND p4.delivered <> 0
El orden no debería importar
Aquí hay un diagrama de Venn de Wikimedia Commons. Independientemente del orden de consulta, obtendrá la superposición entre los círculos A y B, con nulos para las columnas de C donde C no solapa la combinación de A y B.
Puede usar combinaciones internas y externas en la misma consulta, pero su orden es importante. Ver esta pregunta:
Unión interna y unión externa; ¿Es importante el orden de las tablas?