Как ОБНОВИТЬ в SQLite, используя LEFT JOIN для выбора строк-кандидатов - PullRequest
0 голосов
/ 07 января 2011

У меня есть таблица assoc, содержащая столбцы

local_id, remote_id, cachedData

Я могу успешно выполнить запрос SQLITE, который выглядит как

SELECT a1.local_id, a1.remote_id FROM assoc a1 LEFT JOIN ....

, чтобы я мог определить определенные строки assoc таблица, которая соответствует моим критериям.

Что я хотел бы сделать, это установить cachedData в null в этих строках.

Как я могу это сделать?Sqlite не поддерживает UPDATE с объединениями;вы можете создавать подзапросы, но я не могу понять, как получить правильный синтаксис;это кажется мне неинтуитивным.

Ответы [ 3 ]

3 голосов
/ 07 января 2011
 UPDATE assoc SET cachedData = NULL
    WHERE EXISTS (SELECT * FROM otherTable 
        WHERE otherTable.Col1 = assoc.Col1 AND otherTable.Col2 = assoc.Col1)

Имейте в виду, что это не особенно эффективно.

0 голосов
/ 07 января 2011

Ага, встроенный rowid уже есть!

UPDATE assoc
SET cachedData=NULL
WHERE rowid IN (
   SELECT rowid FROM assoc a1 LEFT JOIN ...
);
0 голосов
/ 07 января 2011

Если assoc имеет один столбец в качестве первичного ключа (и при условии, что это local_id):

UPDATE assoc
SET cachedData=NULL
WHERE local_id IN (
  SELECT local_id FROM assoc a1 LEFT JOIN ...
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...