Me gustaría poder verificar fácilmente qué identificadores únicos no existen en una tabla, de los que se proporcionan en una consulta.
Para explicar mejor, esto es lo que haría ahora, para verificar qué ID de la lista "1, 2, 3, 4" no existen en una tabla:
SELECT * FROM dbo."TABLE" WHERE "ID" IN ('1','2','3','4')
, digamos que la tabla no contiene fila con ID 2.- Volcar los resultados en Excel
- Ejecute una BUSQUEDA en la lista original que busca cada valor de lista en la lista de resultados.
- Cualquier BUSQUEDA que resulte en un
#N/A
está en un valor que no ocurrió en la tabla.
Creo que tiene que haber una mejor manera de hacer esto. Estoy buscando, idealmente, algo como
Lista para verificar -> Consulta en la tabla para verificar -> Miembros de la lista que no están en la tabla
sql-server
sql-server-2005
except
NReilingh
fuente
fuente
Respuestas:
Uso
EXCEPT
:Ver SqlFiddle .
El
values
constructor solo funcionará en SQL Server 2008 o posterior. Para 2005, usecomo se detalla en esta respuesta SO .
fuente
Incorrect syntax near the keyword 'values'.
cuandoSELECT * FROM (values ('search string'),('other string')) as T(ID)
Construiría una variable de tabla o tabla temporal que contenga los ID que está buscando ... luego use la solución de Remus, menos el azúcar sintáctico de 2008:
fuente
Ahora soy un par de años más sabio (y tengo un SQL Server más nuevo) que cuando hice esta pregunta, así que para celebrar la insignia de Pregunta famosa que recibí por preguntar esto, esto es lo que haría ahora. (No creo haber usado el
EXCEPT
operador desde entonces).Diría que el
LEFT JOIN
siguiente método es más útil queEXCEPT
ya que puede componerlo con otras combinaciones sin necesidad de un CTE.fuente