2011-08-12 15 views
5

Tengo las tablas A y B en SQL Server y las columnas a y b, respectivamente. Quiero hacer lo siguiente en el comando pseudo-query, pero parece que no puedo resolverlo.SQL Server consulta de eliminación que implica dos tablas

Quiero

DELETE FROM A 
WHERE a < 100 "and only if these selected (for deletion) values don't exist in column b in table B" 

La razón es que estoy tratando de eliminar algunos datos de la Tabla A, pero me da un error diciendo que no hay una restricción entre los valores en A.a y B.b.

¿Esto implica alias? Es confuso ..

+0

¿Qué versión de SQL Server está usando ? –

Respuesta

11

Prueba este si está utilizando SQL Server 2005 o posterior:

DELETE FROM TableA 
WHERE a < 100 AND 
a NOT IN (SELECT B FROM TableB) 

Para SQL Server 2000, este debería funcionar:

DELETE ta 
FROM TableA as ta 
LEFT JOIN TableB as tb 
ON ta.a = tb.b 
WHERE ta.a < 100 AND tb.b IS NULL 
+0

No estaba seguro de la pregunta, pero dado que hubo infracciones de restricciones, ¿podría TableB.b ser una búsqueda de clave externa en TableA? De ser así, ¿habría alguna diferencia en la forma de la eliminación que no sea sustituir "id" por "a" en la cláusula correspondiente? – shelleybutterfly

+0

Hmmm, no estoy seguro de entender. Estoy de acuerdo con su supuesto de clave extranjera. Esta eliminación eliminaría básicamente cualquier registro de la Tabla A que no estuviese referenciado desde la Tabla B, que parece ser lo que necesita. –

+0

@Abe Miessler, ¡su primera consulta funcionó de maravilla! Parece que en MSSQL puedes aplicar un montón de restricciones ...? Aprendí MySQL últimamente, pero no parece haber ninguna de estas características que veo en el SQL Server Management Studio. – musicliftsme

Cuestiones relacionadas