left - union sql




Comment supprimer en utilisant INNER JOIN avec SQL Server? (10)

Je veux supprimer en utilisant INNER JOIN dans SQL Server 2008 .

Mais j'ai cette erreur,

Msg 156, niveau 15, état 1, ligne 15
syntaxe incorrecte près du mot clé 'INNER'.

Mon code:

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

CA devrait etre:

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

Cette version devrait fonctionner

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

Essaye ça:

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

Essayez ceci, cela pourrait aider

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

Il suffit d'ajouter le nom de la table entre DELETE et FROM d'où vous voulez supprimer les enregistrements car nous devons spécifier la table à supprimer. Supprimez également la clause ORDER BY car il n'y a rien à commander lors de la suppression des enregistrements.

Donc, votre dernière requête devrait être comme ceci:

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

Possible cela peut être utile pour vous -

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

Ou essayez ceci -

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

Voici ce que j'utilise actuellement pour supprimer ou même mettre à jour:

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

Voici ma version 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)

Vous ne spécifiez pas les tables pour Company et Date , vous pouvez vouloir corriger cela.

SQL standard utilisant 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 réponse de @Devart est également SQL standard mais incomplète, devrait ressembler plus à ceci:

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

La chose importante à noter à propos de ce qui précède est qu'il est clair que la suppression vise une seule table, comme cela est appliqué dans le second exemple en exigeant une sous-requête scalaire.

Pour moi, les différentes réponses de syntaxe propriétaires sont plus difficiles à lire et à comprendre. Je suppose que l'état d'esprit est mieux décrit dans la réponse par @frans eilering, c'est-à-dire que la personne qui écrit le code ne se soucie pas nécessairement de la personne qui lira et maintiendra le code.


C'est une requête simple pour supprimer les enregistrements de deux tables à la fois.

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




sql-delete