2011-02-27 3 views
4

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

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

DELETE FROM myTable WHERE myValue LIKE 'findme%'; 

и:

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

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

+0

какие два заявления? – Baz1nga

+1

Первый запрос должен работать нормально. Что происходит, когда вы запускаете его? Какую версию SQLite вы используете? – outis

ответ

2

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

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

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

+0

, который отлично поработал, оставив точку с запятой. благодаря! – gypsyDev

+0

@gypsyDev: Я полагаю, вы используете API? В следующий раз вы должны, вероятно, указать это в вопросе! – Benoit

+0

Я думаю, что версия sqlite - sqlite3? Я изменяю базу данных из объекта-C в проекте xCode. – gypsyDev

0

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

DELETE FROM myTable WHERE myValue IN (SELECT myValue FROM myTable WHERE myValue LIKE 'findme%'); 
0

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

DELETE FROM myTable WHERE id IN (SELECT id FROM myTable WHERE myValue LIKE 'findme%'); 
4

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

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

затем заменить "выберите *" с "удалить" должны удалить их.

delete from mytable where myvalue like 'findme%'; 

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

0
DELETE FROM `table_name` WHERE `column_name` LIKE 'value%'
Смежные вопросы