【问题标题】:Using OR in SQL delete在 SQL 删除中使用 OR
【发布时间】:2016-04-25 10:31:40
【问题描述】:

有一个表 'collection' 包含以下列 - id、cid、cname、cdescription、isviewed。

我使用以下查询基于 WHERE 子句进行删除。

delete from collection
where cname not like '/mnt/sdcard%';

当我尝试使用 OR 向上述查询添加一个条件时,该条件不适用,并且在根本不应用 WHERE 子句的情况下删除了行

delete from collection
where cname not like '/mnt/sdcard%' OR isviewed not like '1';

这不是在删除中使用 OR 条件的正确语法吗?如果是,需要做什么才能应用 WHERE 子句中的任何一个条件?

【问题讨论】:

  • 如果没有您的数据、表结构以及结果与预期结果的示例,人们只能猜测可能发生或可能不会发生的事情以及原因。 stackoverflow.com/help/how-to-ask
  • isviewed 列的内容是数字还是字符串?

标签: android sql sqlite android-sqlite


【解决方案1】:

虽然@Spade 解决方案有效,因为无论列的数据类型如何,LIKE 都可以工作,但我认为 isviewed 列不应该被“like”过滤。对我来说,这听起来像是一个 INT 列,其中存储了 10 值。

如果是这种情况,那么不要使用like,只需使用:

delete from collection
where cname not like '/mnt/sdcard%' OR isviewed != 1;

这样会比使用LIKE 更高效。

【讨论】:

  • 无论我的答案中的数据类型如何,过滤都会起作用,所以这是一个可行的解决方案,因为我们不知道实际的数据类型是什么:-)
【解决方案2】:
delete from collection
where 
cname not like '/mnt/sdcard%' OR 
isviewed not like '1%';

这必须与您 like 子查询中的匹配部分有关。通过指定:

'1%'

您正在筛选从 1 开始的所有 isviewed 值,假设这是您所追求的。

考虑

'%1%'

如果您正在寻找字符“1”的存在 或

“%1” 如果您正在寻找以 '1' 结尾的字符串 或

【讨论】:

    猜你喜欢
    • 2012-01-30
    • 2021-10-21
    • 2015-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-16
    相关资源
    最近更新 更多