Pregunta

Creo que voy por el camino correcto con éste ... Por favor tengan paciencia conmigo como mi SQL no es el más grande

Estoy tratando de consultar una base de datos para seleccionar todo, desde una mesa en la que no existen ciertas células en otro. Que gran parte no tiene mucho sentido, pero estoy esperando que este fragmento de código

SELECT * from employees WHERE NOT EXISTS (SELECT name FROM eotm_dyn)

Así que, básicamente, tengo una tabla con una lista de los empleados y sus detalles. Luego, otra mesa con algunos otros detalles, incluyendo su nombre. Donde hay nombre no está en la tabla eotm_dyn, es decir, no hay ninguna entrada para ellos, me gustaría ver exactamente lo que son, o en otras palabras, ver lo que falta exactamente.

La consulta anterior devuelve nada, pero sé que hay 20ish nombres que faltan por lo que he conseguido, obviamente, no es correcto.

¿Alguien puede ayudar?

¿Fue útil?

Solución

No se unió a la mesa en su consulta.

Su búsqueda original siempre devolverá nada a menos que no hay registros en absoluto en eotm_dyn, en cuyo caso se devolverá todo.

Suponiendo que estas tablas debe ser acompañado en employeeID, utilice la siguiente:

SELECT  *
FROM    employees e
WHERE   NOT EXISTS
        (
        SELECT  null 
        FROM    eotm_dyn d
        WHERE   d.employeeID = e.id
        )

Puede unirse a estas tablas con una palabra clave LEFT JOIN y filtrar los años NULL, pero esto probablemente será menos eficiente que el uso NOT EXISTS.

Otros consejos

SELECT * FROM employees WHERE name NOT IN (SELECT name FROM eotm_dyn)

o

SELECT * FROM employees WHERE NOT EXISTS (SELECT * FROM eotm_dyn WHERE eotm_dyn.name = employees.name)

o

SELECT * FROM employees LEFT OUTER JOIN eotm_dyn ON eotm_dyn.name = employees.name WHERE eotm_dyn IS NULL

Puede hacer un LEFT JOIN y afirmar la columna combinada es NULL.

Ejemplo:

SELECT * FROM employees a LEFT JOIN eotm_dyn b on (a.joinfield=b.joinfield) WHERE b.name IS NULL
SELECT * from employees
WHERE NOT EXISTS (SELECT name FROM eotm_dyn)

Nunca devuelve ningún registro a menos eotm_dyn está vacía. Usted necesita algún tipo de criterios en SELECT name FROM eotm_dyn como

SELECT * from employees
WHERE NOT EXISTS (
    SELECT name FROM eotm_dyn WHERE eotm_dyn.employeeid = employees.employeeid
)

suponiendo que las dos tablas están vinculadas por una relación de clave externa. En este punto se puede utilizar una variedad de otras opciones, incluyendo un LEFT JOIN. El optimizador normalmente se encargará de ellos el mismo en la mayoría de los casos, sin embargo.

También puede echar un vistazo a esta pregunta relacionada . Ese usuario informó que el uso de una combinación de un mejor rendimiento proporcionado mediante una consulta sub.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top