online 1
gast (50)

/ Forum / Datenbanken

DatenbankenDatenbanken

Fragevon mrt181 vom 08.08.2019, 12:24 Options

MSSQL: Warum funktioniert update mit diesen bedingungne aber delete nicht?

Nutze MSSQL 2005 Manager übers Netzwerk auf einen MSSQL 2000 Server.

Ich habe diese Konstrukte:

1.
SELECT *
FROM dbo.vw_xy
WHERE (xy_nr IN (12345, 54321))
AND (xy_ab > 100) AND (xy_ab < 131) OR
(xy_ab > 200) AND (xy_ab < 210) OR
(xy_ab > 300) AND (xy_ab < 310) OR
(xy_ab > 400) AND (xy_ab < 409)
ORDER BY xy_ab

alles was ich haben will wird angezeigt, mehr nicht.

2.
UPDATE dbo.vw_xy
SET xy_st = 'G', xy_me = 0, xy_in = 0
WHERE (xy_nr IN (12345, 54321))
AND (xy_ab > 100) AND (xy_ab < 150) OR
(xy_ab > 200) AND (xy_ab < 250) OR
(xy_ab > 300) AND (xy_ab < 350) OR
(xy_ab > 400) AND (xy_ab < 450)

alle Updates laufen durch, ich kann dann die Infos extrahieren.

3.
DELETE FROM dbo.vw_xy
WHERE (xy_nr IN (12345, 54321))
AND (xy_ab > 100) AND (xy_ab < 150) OR
(xy_ab > 200) AND (xy_ab < 250) OR
(xy_ab > 300) AND (xy_ab < 350) OR
(xy_ab > 400) AND (xy_ab < 450)

er löscht mir die zeilen mit den nummern im bereich von xy_ab (101 -149), so wie gewollt ABER dann alle zeilen der restlichen bereich.

Was habe ich falsch gemacht?


Antwort schreiben

Antwort 1 von Marie vom 08.08.2019, 12:31 Options

Zitat:
ABER dann alle zeilen der restlichen bereich.


soll bitte was heissen???

Was soll gelöscht werden und was wird gelöscht???

Gruß Marie

Antwort 2 von mrt181 vom 08.08.2019, 12:39 Options

er löscht die zeilen mit den werten 12345 und 54321 im bereich zwischen 100 bis 150


WHERE (xy_nr IN (12345, 54321)) 
AND (xy_ab > 100) AND (xy_ab < 150)


Das funktioniert. Dann soll er auch aus diesen Bereichen die Werte löschen

OR (xy_ab > 200) AND (xy_ab < 250) 
OR (xy_ab > 300) AND (xy_ab < 350) 
OR (xy_ab > 400) AND (xy_ab < 450)


Er löscht aber in diesen Bereichen alle Zeilen, d.h. in der Tabelle gibt es anschließend diese Bereiche nicht mehr.

Antwort 3 von mrt181 vom 08.08.2019, 12:44 Options

Zitat:
Dann soll er auch aus diesen Bereichen die Werte löschen


sollte heißen:

Dann soll er auch aus diesen Bereichen die Zeilen mit den Werten löschen

Antwort 4 von Proggi vom 08.08.2019, 12:53 Options

wenn die 12345/54321 bedingung auch für die bereiche 200, 300 und 400 gelten soll müstest du klammern setzen:

WHERE xy_nr IN (12345, 54321) AND
(xy_ab > 100 AND xy_ab < 150
OR xy_ab > 200 AND xy_ab < 250
OR xy_ab > 300 AND xy_ab < 350
OR xy_ab > 400 AND xy_ab < 450)


ich habe diese "in" anweisung noch nicht praktisch verwendet, könnte mir vorstellen das da auch etwas nicht hinhaut.

Lasse dir auch mal echo mysql_error(); ausgeben eventuell läuft die delete-anweisung während des löschens auf einen logischen Fehler (ich vermute eben wegen der IN-Anweisung wenn Werte fehlen wo er vielleicht mit vergleichen möchte o.ä.)

Antwort 5 von mrt181 vom 08.08.2019, 13:08 Options

Komisch nur das es bei SELECT und UPDATE funktioniert.

echo mysql_error() steht mir bei microsoft nicht zur Verfügung. Ich werde es mal mit einklammern versuchen, dann ungefähr so:

DELETE FROM dbo.vw_xy
WHERE (xy_nr IN (12345, 54321))
AND ((xy_ab > 100 AND xy_ab < 150) 
OR (xy_ab > 200 AND xy_ab < 250) 
OR (xy_ab > 300 AND xy_ab < 350) 
OR (xy_ab > 400 AND xy_ab < 450))


Die where bedingung beinhalte za 30 Einträge, deswegen habe ich es mit
WHERE spalte IN ('wert_1','wert_2',...,'wert_n')

gemacht statt
WHERE spalte=wert_1 OR spalte=wert_2 OR ... OR spalte=wert_n

Das Beispiel habe ich verkürzt.

Antwort 6 von Proggi vom 08.08.2019, 13:27 Options

die ands brauchst du nicht gesondert zu klammern da "and vor or"

Ähnliche Themen

sql server 2000 erkennt strings nicht
brshna  19.04.2007 - 98 Hits - 3 Antworten

Was muss ich unter --with-mssql[=DIR] verstehen???
Sparky909  23.04.2007 - 112 Hits - 2 Antworten

suchen und löschen bis nichts mehr gefunden wird
Tim85  15.03.2008 - 17 Hits - 5 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Mon Jan 26 01:23:17 2026