varios update tabla registros registro into eliminar eliminacion consulta como borrar sql ms-access delete-row sql-delete

sql - update - insert into access vba



¿Cómo eliminar en MS Access cuando se utiliza JOIN? (3)

Un problema a tener en cuenta: ¡Esto NO funciona con alias de tabla / consulta!

DELETE a.* from tblA as A where exists (select 1 from tblB as B where a.id=b.id)

Elimina TODOS los registros en tblA! Lo intenté usando alias para tblA y tblB por separado: el mismo resultado (Access 2010).

Ocurre con SELECT también (que a menudo uso antes de eliminar) ...

Estoy intentando utilizar la cláusula DELETE en MS Access y tengo un problema cuando también uso la cláusula JOIN . He notado que esto se puede lograr usando la palabra clave DISTINCTROW .

Por ejemplo, la siguiente instrucción SQL no permite la eliminación:

DELETE Table1.* FROM Table1 INNER JOIN Table2 ON Table1.Name=Table2.Name;

Sin embargo, esta declaración hace:

DELETE DISTINCTROW Table1.* FROM Table1 INNER JOIN Table2 ON Table1.Name=Table2.Name;

  • ¿Por qué el DELETE funciona cuando se usa la palabra clave DISTINCTROW ?
  • Más específicamente, ¿qué está pasando en el motor JET para requerir esto?

DELETE a.* FROM tblA AS A WHERE EXISTS (SELECT 1 FROM tblB AS B WHERE a.id=b.id)

prueba esto

DELETE tblA FROM tblB WHERE EXISTS (SELECT * FROM tblA AS A,tblB AS B WHERE A.id=B.id)


Delete Table1.* From Table1 Where Exists( Select 1 From Table2 Where Table2.Name = Table1.Name ) = True

Para ampliar mi respuesta, la especificación oficial de SQL no permite el uso de uniones en consultas de acción específicamente porque puede crear resultados ambiguos. Por lo tanto, es mejor (y Access es mucho más feliz) si puede evitar el uso de uniones en las consultas de acción como he aquí. La razón por la que Access quiere DISTINCTROW es que es probable que la combinación entre las dos tablas cree duplicados de filas de Table1 (es decir, hay múltiples filas relacionadas en Table2) y, por lo tanto, Access se confunde. También descubrí que si intentas utilizar una combinación y una clave principal no existe, Access se bloqueará. En general, es mejor evitar una unión en una consulta de acción si puede.