unir tablas tabla multitablas misma inner ejemplo consultas concatenar sql join

tablas - unir dos consultas sql misma tabla



Unión externa izquierda y una cláusula where adicional (5)

Puedes usar

WHERE (right_table.column=value OR right_table.column IS NULL)

Esto devolverá todas las filas de la tabla 1 y la tabla 2, pero solo cuando la tabla 1 no tenga una fila correspondiente en la tabla 2 o la fila correspondiente en la tabla 2 coincida con sus criterios.

Tengo un join en dos tablas definidas como una combinación externa izquierda para que todos los registros se devuelvan desde la tabla de la izquierda, incluso si no tienen un registro en la tabla de la derecha. Sin embargo, también necesito incluir una cláusula where en un campo de la tabla de la derecha, pero .... Todavía quiero que se devuelva una fila de la tabla de la izquierda para cada registro en la tabla de la izquierda, incluso si el condición en la cláusula where donde no se cumple. ¿Hay alguna forma de hacer esto?


Sí, pon la condición (llamada predicado) en las condiciones de unión

Select [stuff] From TableA a Left Join TableB b On b.Pk = a.Pk -- [Put your condition here, like this] And b.Column = somevalue


Solo necesita poner el predicado en la condición JOIN . Poniéndolo en la cláusula WHERE convertiría efectivamente su consulta en una unión interna.

Por ejemplo:

... From a Left Join b on a.id = b.id and b.condition = ''x''


SELECT x.fieldA, y.fieldB FROM x LEFT OUTER JOIN (select fieldb, fieldc from Y where condition = some_condition) ON x.fieldc = y.fieldc


select * from table1 t1 left outer join table2 t2 on t1.id = t2.id where t1.some_field = nvl(t2.some_field, t1.some_field)

UPD: errr ... no. de esta manera:

select * from table1 t1 left outer join table2 t2 on t1.id = t2.id where some_required_value = nvl(t2.some_field, some_required_value)

nvl es una sintaxis de Oracle que reemplaza el primer argumento por el segundo en caso de que sea null (que es común para las uniones externas). Puede usar ifnull o coalesce para otras bases de datos.

Por lo tanto, compara t2.some_field con tus criterios de búsqueda si se ha reunido con el predicado join, pero si no lo ha hecho, solo devuelve row desde table1 , porque some_required_value comparado some_required_value mismo siempre será verdadero (a menos que sea null , sin embargo - null = null produce null , ni true ni false .