SELECCIONE * DONDE NO EXISTA
Creo que voy por el camino correcto con este... Por favor, tenga paciencia conmigo ya que mi SQL no es el mayor
Estoy tratando de consultar una base de datos para seleccionar todo de una tabla donde ciertas celdas no existen en otra. Eso no tiene mucho sentido, pero espero que esta pieza 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 empleados y sus detalles. Luego otra tabla con algunos otros detalles, incluyendo su nombre. Donde no hay nombre en la tabla eotm_dyn, lo que significa que no hay ninguna entrada para ellos, me gustaría ver exactamente quiénes son, o en otras palabras, ver qué falta exactamente.
La consulta anterior no devuelve nada, pero sé que faltan 20 nombres, así que obviamente no lo he hecho bien.
Alguien Puede ayudar?
5 answers
No se unió a la tabla en su consulta.
Su consulta original siempre devolverá nada a menos que no haya registros en absoluto en eotm_dyn
, en cuyo caso devolverá todo.
Suponiendo que estas tablas deben unirse en employeeID
, use lo siguiente:
SELECT *
FROM employees e
WHERE NOT EXISTS
(
SELECT null
FROM eotm_dyn d
WHERE d.employeeID = e.id
)
Puede unir estas tablas con una palabra clave LEFT JOIN
y filtrar las NULL
, pero esto probablemente será menos eficiente que usar NOT EXISTS
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-05 09:54:29
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-05-27 13:20:41
Puede hacer una UNIÓN a la IZQUIERDA y afirmar que la columna unida es NULL.
Ejemplo:
SELECT * FROM employees a LEFT JOIN eotm_dyn b on (a.joinfield=b.joinfield) WHERE b.name IS NULL
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-05-27 13:19:59
SELECT * from employees
WHERE NOT EXISTS (SELECT name FROM eotm_dyn)
Nunca devuelve ningún registro a menos que eotm_dyn
esté vacío. Necesitas algún tipo de criterio 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 foránea. En este punto, podría usar una variedad de otras opciones, incluida una UNIÓN IZQUIERDA. Sin embargo, el optimizador normalmente los manejará de la misma manera en la mayoría de los casos.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-05-27 13:24:26
También puedes echar un vistazo a esta pregunta relacionada. Ese usuario informó que el uso de una combinación proporcionaba un mejor rendimiento que el uso de una consulta secundaria.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:26:19