我有一个表,其中包含文件的md5总和,并使用以下查询查找存在于一个哈希运行中而不存在于另一个哈希运行中的文件(oldt vs newt):
SELECT *
FROM md5_sums as oldt
WHERE NOT EXISTS (SELECT *
FROM md5_sums as newt
WHERE oldt.file = newt.file
and oldt.relpath = newt.relpath
and newt.starttime = 234)
and oldt.starttime = 123
现在我想在带有更新子句的额外列中放置一个标志,例如
update md5_sums
set only_in_old = 'X'
where
,在那里我想引用上层查询作为子查询,但是我找不到正确的方法。是否可以将上层查询的结果用于update-query的where子句? (我现在添加了一些带有简单表格数据的表格屏幕截图)
答案 0 :(得分:1)
SQLite不支持对更新的表进行别名。
在您的情况下,您不需要。
您可以在子查询中使用表名md5_sums
,因为您将SELECT
语句的表别名为newt
。
UPDATE md5_sums
SET only_in_old = 'X'
WHERE NOT EXISTS (
SELECT 1 FROM md5_sums AS newt
WHERE md5_sums.file = newt.file
AND md5_sums.relpath = newt.relpath
AND newt.starttime = 234
)
AND starttime = 123
请参见demo。
结果:
| file | relpath | starttime | only_in_old |
| ------- | -------- | --------- | ----------- |
| abc.txt | /var/tmp | 123 | |
| abc.txt | /var/tmp | 234 | |
| def.txt | /tmp | 123 | X |
| xyz.txt | /tmp | 234 | |
答案 1 :(得分:0)
我希望这可以帮助您将select语句转换为update语句,
UPDATE md5_sums
SET only_in_old = 'X'
WHERE NOT EXISTS (SELECT *
FROM md5_sums newt
WHERE file = newt.file
and relpath = newt.relpath
and newt.starttime = 1551085649.7764235)
and starttime = 1551085580.009046