thgrch
Goto Top

sql datensätze löschen (MSSQL2005)

Ich möchte alle Datensätze in der Tabelle A löschen, welche NICHT der Abfrage entsprechen.

Abfrage
SELECT fieldA FROM tableA INNER JOIN tableB ON tableA.fieldA = tableB.fieldB;

Herzlichen Dank für Eure Hilfe!

Content-ID: 96080

Url: https://administrator.de/contentid/96080

Ausgedruckt am: 26.11.2024 um 13:11 Uhr

Biber
Biber 04.09.2008 um 11:16:41 Uhr
Goto Top
Moin thgrch,

 delete from tableA where tableA.fieldA not in (
SELECT fieldA FROM tableA INNER JOIN tableB ON tableA.fieldA = tableB.fieldB);

Grüße
Biber
thgrch
thgrch 04.09.2008 um 11:43:27 Uhr
Goto Top
Hallo und herzlichen Dank!

das will noch nicht.... Fehlermeldung
You can't specify target table 'onair45' for update in FROM clause
->onair45 ist tableA

tableA
fieldA
1
2
3
4
5
6

tableB
FieldB
5
6
5
4
6

alles in tableA löschen was nicht tableA.fieldA = tableB.fieldB
-> in tableA.fieldA wird 1,2 und 3 gelöscht

DANKE!!
Biber
Biber 04.09.2008 um 11:58:41 Uhr
Goto Top
Moin thgrch,

dann kannst Du
  • entweder der tableA in der From-Clause einen Alias geben
  • oder, wahrscheinlich sogar eleganter, Du machst es über einen LEFT statt INNER JOIN:
 delete from tableA 
LEFT JOIN tableB ON tableA.fieldA = tableB.fieldB
Where tableB.fieldB is Null;

Grüße
Biber
thgrch
thgrch 04.09.2008 um 13:12:40 Uhr
Goto Top
Gut...

mit
SELECT fieldA FROM tableA INNER JOIN tableB ON tableA.fieldA = tableB.fieldB
-> werden die Werte 4,5 und 6 ausgegeben

mit
SELECT fieldA FROM tableA left JOIN tableB ON tableA.fieldA = tableB.fieldB Where tableB.fieldB is Null
-> 1,2,und3

...wie kann ich im tablea löschen??

Danke
Biber
Biber 04.09.2008 um 13:30:07 Uhr
Goto Top
Sorry, thgrch,

entweder habe ich die Frage nicht verstanden ...
... oder Du die Antworten nicht ...
... oder die sind halt inkompatibel....

Wir sollten auf Hilfe von dritter Seite warten...

Grüße
Biber
thgrch
thgrch 04.09.2008 um 13:49:45 Uhr
Goto Top
DANKE

mit
SELECT fieldA FROM tableA left JOIN tableB ON tableA.fieldA = tableB.fieldB Where tableB.fieldB is Null

bekomme ich das gewünschte Ergebnis.

Für das löschen ersetzte ich SELECT fiendA durch
DELETE from tableA

DELETE from tableA FROM tableA left JOIN tableB ON tableA.fieldA = tableB.fieldB Where tableB.fieldB is Null

doch leider meldet MYSQL und MSSQL ein Syntax Fehler zurück...
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM tableA left JOIN tableB ON tableA.fieldA = tableB.fieldB Where tableB.field' at line 1

tja...
thgrch
thgrch 04.09.2008 um 19:09:12 Uhr
Goto Top
... tja mit MSSQL2005 funktioniert es!! SUUUPER!
... mit MYSQL 5 kommt der Syntax error


Herzlichen DANK!!!!!!