2011-02-27 170 views
4

我想将两者合并成一个单独的语句,我甚至会解决两个单独的语句.....我知道它一定是可能的,但是如何?在sqlite语句中梳理DELETE和LIKE

这是我曾尝试:

DELETE FROM myTable WHERE myValue LIKE 'findme%'; 

和:

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

我得到一个错误,第二个声明说像,你只能有一个LIKE语句一个结果与另一种说法...

+0

哪两条语句? – Baz1nga 2011-02-27 10:40:13

+1

第一个查询应该可以正常工作。当你运行它会发生什么?你正在使用哪种SQLite版本? – outis 2011-02-27 10:42:56

回答

2

您的第一个声明应该工作。尝试没有最终的分号可能?

第二个不合逻辑。您的子查询与第​​一个不相关,并且无法扫描正在修改的表。实际上,我期望从这个查询,如果它将永远运行,是所有行都删除,如果有一列,你的列匹配...

如果你想知道为什么解决方案与IN条款工作,而不是EXISTS,这是因为EXISTS条件是针对每一行进行评估的,而IN集合只评估一次。

+0

工作很好,留下了分号。谢谢! – gypsyDev 2011-02-27 10:49:56

+0

@gypsyDev:我想你正在使用一个API?下次你应该在问题中说明它! – Benoit 2011-02-27 10:51:58

+0

我认为sqlite的版本是sqlite3?我正在修改xCode项目中来自Objective-C的数据库。 – gypsyDev 2011-02-27 10:57:22

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%'; 

然后替换 “SELECT *”, “删除” 应该删除它们。

delete from mytable where myvalue like 'findme%'; 

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

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