2016-04-18 4 views
0

Я хотел бы, чтобы удалить все записи в таблице, соответствующие подзапрос, как так:Удалить из подзапроса MYSQL

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

Я получаю эту ошибку:

Error Code 1241: Operand should contain 1 column

Я хочу также следует избегать:

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

ответ

3

вы должны использовать IN

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

Это не сработает, поскольку при вызове SELECT * возвращаются множественные coulmns, и вы проверяете clientMac со всеми столбцами – Naruto

0

Ошибка связана с несоответствием столбцов. Ваш запрос на выборке должен возвращать только столбец clientMac, а также, если есть несколько результата ожидается затем использовать IN Query как ниже

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

Если я понимаю ваш запрос прямо тогда ваш запрос не требует подзапроса. Пожалуйста, посмотрите это:

DELETE FROM устройства WHERE clientMac IN (SELECT clientMac FROM устройства, где clientMac = '80: d6: 05: 02: 1d: b9')

Является equivalant к:

DELETE FROM устройство WHERE clientMac = '80: d6: 05: 02: 1d: b9 ';

Я думаю, вы хотели достичь чего-то еще. Пожалуйста подтвердите.

0

Здесь поле id - ваш первичный ключ таблицы.

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) 
Смежные вопросы