2017-08-17 3 views
2
DELETE FROM MYTABLE WHERE ID = 1 and NAME ='xyz'; 
DELETE FROM MYTABLE WHERE ID = 2 and NAME ='abc'; 
DELETE FROM MYTABLE WHERE ID = 3 and NAME ='abc'; 

Ich habe mehrere Löschanweisungen oben erwähnt. Wie kann ich sie in weniger Anweisungen löschen? Muss ich 100 Löschanweisungen schreiben?Mehrere Zeilen in Oracle löschen

Antwort

2

Sie können dies tun:

delete from mytable 
where (id, name) in ((1, 'xyz'), 
        (2, 'abc'), 
        (3, 'abc')); 
+0

Thank you! Das funktioniert. – PeaceIsPearl

0

könnten Sie IN verwenden:

DELETE FROM MYTABLE 
WHERE (ID, NAME) IN (SELECT 1 AS ID, 'xyz' AS NAME FROM dual UNION ALL 
        SELECT 2 AS ID, 'abc' AS NAME FROM dual UNION ALL 
        SELECT 3 AS ID, 'abc' AS NAME FROM dual); 

Natürlich innerhalb subquery Sie alle wählen (zum Beispiel von globalen temporären Tabelle) verwenden könnte.

-1
DELETE FROM MYTABLE 
    WHERE ID IN (1, 2, 3) AND NAME IN ('XYZ', 'ABC'); 

Wenn Ihre ID-Feld eindeutig ist dann verwenden:

DELETE FROM MYTABLE WHERE ID IN (1, 2, 3); 
+0

Der erste Teil Ihrer Antwort ist nicht unbedingt korrekt. Eine Zeile mit 'Id = 1' und 'Name =' abc 'würde Ihren Kriterien entsprechen, aber nicht seinen. – JBC

Verwandte Themen