subconsulta postgres partir left inner delete condiciones con sql sql-server sql-server-2008 inner-join sql-delete

postgres - ¿Cómo eliminar usando INNER JOIN con SQL Server?



delete inner join postgres (15)

Quiero eliminar usando INNER JOIN en SQL Server 2008 .

Pero me sale este error:

Msg 156, Nivel 15, Estado 1, Línea 15
Sintaxis incorrecta cerca de la palabra clave ''INTERIOR''.

Mi código:

DELETE FROM WorkRecord2 INNER JOIN Employee ON EmployeeRun=EmployeeNo WHERE Company = ''1'' AND Date = ''2013-05-06''


Aquí está mi versión de SQL Server

DECLARE @ProfileId table(Id bigint) DELETE FROM AspNetUsers OUTPUT deleted.ProfileId INTO @ProfileId WHERE Email = @email DELETE FROM UserProfiles WHERE Id = (Select Id FROM @ProfileId)


Debe especificar de qué tabla está eliminando, aquí hay una versión con un alias:

DELETE w FROM WorkRecord2 w INNER JOIN Employee e ON EmployeeRun=EmployeeNo WHERE Company = ''1'' AND Date = ''2013-05-06''


Debería ser:

DELETE zpost FROM zpost INNER JOIN zcomment ON (zpost.zpostid = zcomment.zpostid) WHERE zcomment.icomment = "first"


En SQL Server Management Studio puedo crear fácilmente una consulta SELECT.

SELECT Contact.Naam_Contactpersoon, Bedrijf.BedrijfsNaam, Bedrijf.Adres, Bedrijf.Postcode FROM Contact INNER JOIN Bedrijf ON Bedrijf.IDBedrijf = Contact.IDbedrijf

Puedo ejecutarlo, y se muestran todos mis contactos.

Ahora cambia el SELECT a DELETE:

DELETE Contact FROM Contact INNER JOIN Bedrijf ON Bedrijf.IDBedrijf = Contact.IDbedrijf

Se eliminarán todos los registros que haya visto en la instrucción SELECT.

Incluso puede crear una unión interna más difícil con el mismo procedimiento, por ejemplo:

DELETE FROM Contact INNER JOIN Bedrijf ON Bedrijf.IDBedrijf = Contact.IDbedrijf INNER JOIN LoginBedrijf ON Bedrijf.IDLoginBedrijf = LoginBedrijf.IDLoginBedrijf


Esta versión debería funcionar

DELETE WorkRecord2 FROM WorkRecord2 INNER JOIN Employee ON EmployeeRun=EmployeeNo Where Company = ''1'' AND Date = ''2013-05-06''


Esto es lo que uso actualmente para eliminar o incluso actualizar:

DELETE FROM w FROM WorkRecord2 w, Employee e WHERE w.EmployeeRun = e.EmployeeNo AND w.Company = ''1'' AND w.Date = ''2013-05-06''


Intenta esta consulta:

DELETE WorkRecord2, Employee FROM WorkRecord2 INNER JOIN Employee ON (tbl_name.EmployeeRun=tbl_name.EmployeeNo) WHERE tbl_name.Company = ''1'' AND tbl_name.Date = ''2013-05-06'';


Intenta esto, podría ayudar

DELETE WorkRecord2 FROM WorkRecord2 INNER JOIN Employee ON EmployeeRun=EmployeeNo WHERE Company = ''1'' AND Date = ''2013-05-06'';


No especifica las tablas para Company y Date , es posible que desee corregir eso.

SQL estándar utilizando MERGE :

MERGE WorkRecord2 T USING Employee S ON T.EmployeeRun = S.EmployeeNo AND Company = ''1'' AND Date = ''2013-05-06'' WHEN MATCHED THEN DELETE;

La respuesta de @Devart también es SQL estándar, aunque incompleta, debería parecerse más a esto:

DELETE FROM WorkRecord2 WHERE EXISTS ( SELECT * FROM Employee S WHERE S.EmployeeNo = WorkRecord2.EmployeeRun AND Company = ''1'' AND Date = ''2013-05-06'' );

Lo importante a tener en cuenta sobre lo anterior es que está claro que la eliminación se dirige a una sola tabla, como se aplica en el segundo ejemplo al requerir una subconsulta escalar.

Para mí, las diversas respuestas de sintaxis propietarias son más difíciles de leer y comprender. Supongo que la mentalidad para se describe mejor en la respuesta por @frans eilering, es decir, la persona que escribe el código no se preocupa necesariamente por la persona que leerá y mantendrá el código.


Otra forma de utilizar CTE .

;WITH cte AS (SELECT * FROM workrecord2 w WHERE EXISTS (SELECT 1 FROM employee e WHERE employeerun = employeeno AND company = ''1'' AND date = ''2013-05-06'')) DELETE FROM cte

Nota: No podemos usar JOIN dentro de CTE cuando desee delete .


Posiblemente esto te sea de utilidad.

DELETE FROM dbo.WorkRecord2 WHERE EmployeeRun IN ( SELECT e.EmployeeNo FROM dbo.Employee e WHERE ... )

O prueba esto ...

DELETE FROM dbo.WorkRecord2 WHERE EXISTS( SELECT 1 FROM dbo.Employee e WHERE EmployeeRun = e.EmployeeNo AND .... )


Prueba esto:

DELETE FROM WorkRecord2 FROM Employee Where EmployeeRun=EmployeeNo And Company = ''1'' AND Date = ''2013-05-06''


Simplemente agregue el nombre de la tabla entre DELETE y FROM desde donde desea eliminar los registros porque tenemos que especificar la tabla que se eliminará. También elimine la cláusula ORDER BY porque no hay nada que ordenar al eliminar registros.

Entonces tu consulta final debería ser así:

DELETE WorkRecord2 FROM WorkRecord2 INNER JOIN Employee ON EmployeeRun=EmployeeNo WHERE Company = ''1'' AND Date = ''2013-05-06'';


Esta es una consulta simple para eliminar los registros de dos tablas a la vez.

DELETE table1.* , table2.* FROM table1 INNER JOIN table2 ON table1.id= table2.id where table1.id =''given_id''


DELETE a FROM WorkRecord2 a INNER JOIN Employee b ON a.EmployeeRun = b.EmployeeNo Where a.Company = ''1'' AND a.Date = ''2013-05-06''