wake-up-neo.com

So löschen Sie mit INNER JOIN mit SQL Server?

Ich möchte mit INNER JOIN in SQL Server 2008 löschen.

Aber ich bekomme diesen Fehler:

Meldung 156, Ebene 15, Status 1, Zeile 15
Falsche Syntax neben dem Schlüsselwort 'INNER'.

Mein Code:

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

Sie müssen angeben, aus welcher Tabelle Sie löschen. Hier ist eine Version mit einem Alias:

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

Fügen Sie einfach den Namen der Tabelle zwischen DELETE und FROM hinzu, von wo aus Sie Datensätze löschen möchten, da wir die zu löschende Tabelle angeben müssen. Entfernen Sie auch die ORDER BY -Klausel, da beim Löschen von Datensätzen keine Reihenfolge erforderlich ist.

Ihre letzte Abfrage sollte also so aussehen:

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

Versuche dies:

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

Möglicherweise ist dies hilfreich für Sie -

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

Oder versuchen Sie es -

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

Es sollte sein:

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

Diese Version sollte funktionieren

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

Versuchen Sie diese Abfrage:

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';
7
Ali

In SQL Server Management Studio kann ich problemlos eine SELECT-Abfrage erstellen.

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

Ich kann es ausführen und alle meine Kontakte werden angezeigt.

Ändern Sie nun das SELECT in ein DELETE:

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

Alle Datensätze, die Sie in der Anweisung SELECT gesehen haben, werden entfernt.

Sie können sogar einen schwierigeren inneren Join mit derselben Prozedur erstellen, zum Beispiel:

DELETE FROM Contact
INNER JOIN Bedrijf ON Bedrijf.IDBedrijf = Contact.IDbedrijf
INNER JOIN LoginBedrijf ON Bedrijf.IDLoginBedrijf = LoginBedrijf.IDLoginBedrijf
6
frans eilering
 DELETE a FROM WorkRecord2 a 
       INNER JOIN Employee b 
       ON a.EmployeeRun = b.EmployeeNo 
       Where a.Company = '1' 
       AND a.Date = '2013-05-06'
5
Dhanraj Mittal

Versuchen Sie dies, es könnte helfen

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

Eine andere Möglichkeit, CTE zu verwenden.

;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 

Hinweis: Wir können JOIN nicht in CTE verwenden, wenn Sie delete möchten.

3

Dies ist eine einfache Abfrage, um die Datensätze aus zwei Tabellen gleichzeitig zu löschen.

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

Sie geben die Tabellen für Company und Date nicht an. Möglicherweise möchten Sie dies korrigieren.

Standard-SQL mit MERGE:

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

Die Antwort von @Devart ist ebenfalls Standard SQL, obwohl unvollständig, sollte ungefähr so ​​aussehen:

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

Zu beachten ist hierbei, dass das Löschen eindeutig auf eine einzelne Tabelle abzielt, was im zweiten Beispiel durch das Erfordernis einer skalaren Unterabfrage erzwungen wird.

Für mich sind die verschiedenen proprietären Syntaxantworten schwerer zu lesen und zu verstehen. Ich denke, die Denkweise ist am besten in der Antwort von @frans eilering beschrieben, d. H. Die Person, die den Code schreibt, kümmert sich nicht unbedingt um die Person, die den Code lesen und pflegen wird.

2
onedaywhen

Hier ist meine SQL Server-Version

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)
1
ozzy432836

Folgendes verwende ich derzeit zum Löschen oder sogar Aktualisieren:

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