在sqlite语句中梳理DELETE和LIKE

时间:2011-02-27 10:35:43

标签: sqlite

我试图将两者合并为一个单一的陈述,我甚至会接受两个单独的陈述.....我知道它一定是可能的,但是如何?

这就是我的尝试:

DELETE FROM myTable WHERE myValue LIKE 'findme%';

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

我得到第二个语句的错误,比如说,你只能用另一个语句的LIKE语句得到一个结果......

5 个答案:

答案 0 :(得分:4)

如果此语句返回任何行

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

然后将“select *”替换为“delete”应删除它们。

delete from mytable where myvalue like 'findme%';

只要您有足够的权限,这应该适用于任何SQL数据库。

答案 1 :(得分:2)

您的第一个陈述应该有效。尝试没有最后的分号?

第二个不符合逻辑。您的子查询与第​​一个不相关,您无法扫描正在修改的表。实际上,我对此查询的期望是,如果它的列匹配,则会删除所有行...

如果您想知道为什么带有IN子句的解决方案有效而不是EXISTS,那是因为EXISTS条件是针对每一行进行评估的,而IN则是{{1}} set评估一次。

答案 2 :(得分:0)

你试过这个吗?

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

答案 3 :(得分:0)

这对我有用:

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

答案 4 :(得分:0)

DELETE FROM `table_name` WHERE `column_name` LIKE 'value%'