/ / SQL escribe NOT IN como FULL JOIN - sql, join

SQL escribe NOT IN como FULL JOIN - sql, join

¿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 № 1

No 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.