我试图将两者合并为一个单一的陈述,我甚至会接受两个单独的陈述.....我知道它一定是可能的,但是如何?
这就是我的尝试:
DELETE FROM myTable WHERE myValue LIKE 'findme%';
和
DELETE FROM myTable WHERE EXISTS (SELECT * FROM myTable WHERE myValue LIKE 'findme%');
我得到第二个语句的错误,比如说,你只能用另一个语句的LIKE语句得到一个结果......
答案 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%'