我的 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/