Обновление ссылок на подзапрос (sqlite) - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть таблица с суммами 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

, и там я хочу сослаться на верхний запрос как подзапрос, но я не могу найти правильный путь.Есть ли возможность использовать результаты из верхнего запроса для предложения where из запроса на обновление?(Я добавил несколько скриншотов таблиц с простыми табличными данными)

Описание таблицы Table Description

Табличные данные до ОБНОВЛЕНИЯ Table Data before UPDATE

требуемые данные таблицы после ОБНОВЛЕНИЯ desired Table Data after UPDATE

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

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

См. Демоверсию .Результаты:

| 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       |             |
0 голосов
/ 25 февраля 2019

Я надеюсь, что это поможет вам преобразовать оператор выбора в оператор обновления,

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...