¿Es posible escribir la siguiente declaración de SQL como una COMPLETA COMPLETA en lugar de usar NOT IN?
select * from [user] u
AND u.user_id NOT IN (SELECT user_id FROM job)
Me gustaría hacer algo como esto:
SELECT u.* FROM [user] u
FULL JOIN job uj ON u.user_id = uj.user_id
WHERE uj.user_id IS NULL
Estoy buscando obtener todos los usuarios que no tienen un registro en la tabla de trabajos utilizando un COMPLETO COMPLETO.
Respuestas
3 para la respuesta № 1No necesitas un FULL OUTER JOIN
. Tu necesitas un LEFT JOIN
:
select *
from [user] u
left join job uj
on u.user_id = uj.user_id
where uj.user_id IS NULL
UN LEFT JOIN
devolverá todas las filas de la user
independientemente de si hay o no una fila coincidente en el job
mesa.
Luego, cuando se agrega el where j.user_id is null
Filtrarlo devolverá todos los registros solo en el user
mesa.
Aquí hay una gran explicación visual de las uniones Eso es útil cuando se trata de averiguar la sintaxis de unión adecuada.
Ver un Demostración de SQL Fiddle con ambas versiones de la consulta (NOT IN
y LEFT JOIN
) que muestra que ambos devuelven los mismos datos.
2 para la respuesta № 2
SELECT u.*
FROM [user] u
LEFT JOIN job j on (u.user_id = j.user_id)
WHERE j.user_id is NULL
¿Por qué necesitas usar FULL JOIN? Lo anterior te da lo que buscas.
2 para la respuesta № 3
Quieres un left outer join
. UN full outer join
Es un poco redundante, porque presumiblemente uj.user_id
no sería NULL.
Las dos consultas son equivalentes, aunque pueden tener diferentes planes de ejecución, dependiendo de la base de datos.