расчесывание DELETE и LIKE в выражении sqlite - PullRequest
6 голосов
/ 27 февраля 2011

Я пытаюсь объединить два в один документ, я бы даже согласился на два отдельных утверждения ..... Я знаю, что это возможно, но как?

вот что я пробовал:

DELETE FROM myTable WHERE myValue LIKE 'findme%';

и

DELETE FROM myTable WHERE EXISTS (SELECT * FROM myTable WHERE myValue LIKE 'findme%');

Я получаю сообщение об ошибке для второго оператора, говорящее что-то вроде: вы можете иметь только один результат для оператора LIKE с другим оператором ...

Ответы [ 5 ]

4 голосов
/ 27 февраля 2011

Если этот оператор возвращает какие-либо строки

select * from mytable where myvalue like 'findme%';

, тогда замена "select *" на "delete" должна удалить их.

delete from mytable where myvalue like 'findme%';

Это должно работать с любой базой данных SQL, если у вас достаточно прав.

2 голосов
/ 27 февраля 2011

Ваше первое утверждение должно работать. Может, без последней точки с запятой?

Второй не логичен. Ваш подзапрос не связан с первым, и вы не можете просмотреть таблицу, которая изменяется. На самом деле, чего бы я хотел ожидать от этого запроса, если он когда-либо будет выполняться, так это того, что все строки будут удалены, если есть одна строка, в которой совпадает ваш столбец…

Если вам интересно, почему решения с предложением IN работают, а не EXISTS, это потому, что условие EXISTS оценивается для каждой строки, тогда как набор IN оценивается один раз.

0 голосов
/ 26 января 2017
DELETE FROM `table_name` WHERE `column_name` LIKE 'value%'
0 голосов
/ 27 февраля 2011

Это работает для меня:

DELETE FROM myTable WHERE id IN (SELECT id FROM myTable WHERE myValue LIKE 'findme%');
0 голосов
/ 27 февраля 2011

Вы пробовали это?

DELETE FROM myTable WHERE myValue IN (SELECT myValue FROM myTable WHERE myValue LIKE 'findme%');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...