更新对子查询的引用(sqlite)
Update referencing on subquery (sqlite)
我有一个 table 和文件的 md5 总和,并使用以下查询查找存在于一个散列中的文件-运行 而不是另一个(oldt 与 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
我想引用上层查询作为子查询,但我找不到合适的方法。是否有可能将上层查询的结果用于更新查询的 where 子句?
(我现在添加了一些 Table 带有简单 Table 数据的屏幕截图)
Table 说明
Table更新前的数据
需要 Table 更新后的数据
我希望这可以帮助您将 select 语句转换为更新语句,
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
SQLite 不支持别名更新 table。
在你的情况下你不需要那个。
您可以在子查询中使用 table 的名称 md5_sums
,因为您将 SELECT
语句的 table 别名为 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 | |
我有一个 table 和文件的 md5 总和,并使用以下查询查找存在于一个散列中的文件-运行 而不是另一个(oldt 与 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
我想引用上层查询作为子查询,但我找不到合适的方法。是否有可能将上层查询的结果用于更新查询的 where 子句? (我现在添加了一些 Table 带有简单 Table 数据的屏幕截图)
Table 说明
Table更新前的数据
需要 Table 更新后的数据
我希望这可以帮助您将 select 语句转换为更新语句,
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
SQLite 不支持别名更新 table。
在你的情况下你不需要那个。
您可以在子查询中使用 table 的名称 md5_sums
,因为您将 SELECT
语句的 table 别名为 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 | |