2016-04-18 23 views
0

ich die Unterabfrage alle Datensätze in einer Tabelle löschen möchten, wie so passend:Löschen von einer MYSQL Unterabfrage

delete from device where clientMac = (select * from device where clientMac = '80:d6:05:02:1d:b9'); 

ich diesen Fehler:

Error Code 1241: Operand should contain 1 column

Ich möchte auch vermeiden:

Error 1093: You can't specify target table for update in FROM clause

Antwort

3

Sie IN

verwenden
DELETE FROM device WHERE clientMac IN (SELECT clientMac FROM device where clientMac='80:d6:05:02:1d:b9') 
+0

Es wird nicht funktionieren, da mehrere Multicults zurückgegeben werden, wenn Sie SELECT * aufrufen und Sie clientMac mit allen Spalten überprüfen – Naruto

0

Der Fehler ist auf eine fehlende Übereinstimmung der Spalten zurückzuführen. Ihre Auswahlabfrage darf nur Spalte zurückgeben clientMac und auch wenn es mehrere Ergebnis erwartet dann in Abfrage wie unter

delete from device where clientMac IN (select clientMac from device where clientMac = '80:d6:05:02:1d:b9'); 
1
delete from device 
where clientMac in (
     select * from 
     (select clientMac from device where clientMac = '80:d6:05:02:1d:b9')as t 
    ); 
1

verwenden, wenn ich Ihre Frage richtig verstehe dann Ihre Abfrage nicht Unterabfrage benötigt. Bitte sehen Sie dies:

VON Gerät DELETE WHERE clientMac IN (clientMac FROM Gerät auswählen, wo clientMac = '80: d6: 05: 02: 1d: b9')

Ist equivalant zu:

DELETE FROM Gerät WHERE clientMac = '80: d6: 05: 02: 1d: b9 ';

Ich glaube, Sie wollten etwas anderes erreichen. Bitte bestätigen.

0

Hier ist ID-Feld Ihr Primärschlüssel der Tabelle.

delete 
from device 
where id in (select * 
      from (select id 
        from device 
        where FIND_IN_SET(clientMac,'80:d6:05:02:1d:b9')) 
      as t1) 
Verwandte Themen