sqlite - Sqlite 子查询的问题

标签 sqlite subquery

我的 CustomTags 表可能有一系列“临时”记录,其中 Tag_ID 为 0,并且 Tag_Number 将有一些五位数的值。

定期,我想清理我的 Sqlite 表以删除这些临时值。

例如,我可能有:

Tag_ID      Tag_Number
0           12345
0           67890
0           45678
1           12345
2           67890

在这种情况下,我想删除前两条记录,因为它们与实际的 Tag_ID 1 和 2 重复。但我不想删除第三条记录,因为它还没有被复制。

我尝试了许多不同类型的子查询,但我就是无法让它工作。这是我尝试的最后一件事,但我的数据库客户端提示未知语法错误。 (我尝试过使用和不使用 AS 作为别名)
DELETE FROM CustomTags t1
WHERE t1.Tag_ID = 0
    AND (SELECT COUNT(*) FROM CustomTags t2 WHERE t1.Tag_Number = t2.Tag_Number) > 1

谁能提供一些见解?谢谢

最佳答案

有很多选项,但最简单的可能是使用 EXISTS ;

DELETE FROM CustomTags
WHERE Tag_ID = 0
  AND EXISTS(
    SELECT 1 FROM CustomTags c
    WHERE c.Tag_ID <> 0 AND c.Tag_Number = CustomTags.Tag_Number
  )

An SQLfiddle to test with .

...或NOT IN ...
DELETE FROM CustomTags
WHERE Tag_ID = 0
  AND Tag_Number IN (
    SELECT Tag_Number FROM CustomTags WHERE Tag_ID <> 0
  )

Another SQLfiddle .

关于sqlite - Sqlite 子查询的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35738627/

相关文章:

java - 为什么sqlite autoincrement int 不能为null?

PHP:数据库缓存(内存中有 sqlite)

java - 根据历史记录 sqlite 中存储的数据在每个 chrome 选项卡/网站上花费的时间

android - Sqlite 插入或替换查询与整数字段的增量

mysql - 有效的 MySQL 子查询语法和位置

mysql - SQL 嵌套查询作业 SQL Fiddle

sql - 选择相关表中前N个结果最高的项目

android - SQLite 磁盘 IO 异常和无法打开数据库异常

mysql - 仅在 JOIN 不起作用时显示记录的子查询

mysql - JOIN 语句中双嵌套派生表中的未知列