如何使用LEFT JOIN在SQLite中更新以选择候选行

时间:2011-01-07 03:48:57

标签: sql sqlite join

我有一个包含列

的表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 个答案:

答案 0 :(得分:3)

 UPDATE assoc SET cachedData = NULL
    WHERE EXISTS (SELECT * FROM otherTable 
        WHERE otherTable.Col1 = assoc.Col1 AND otherTable.Col2 = assoc.Col1)

请注意,这不是特别有效。

答案 1 :(得分:0)

如果assoc有一列作为主键(假设它是local_id):

UPDATE assoc
SET cachedData=NULL
WHERE local_id IN (
  SELECT local_id FROM assoc a1 LEFT JOIN ...
);

答案 2 :(得分:0)

啊哈,已经有了内置的rowid!

UPDATE assoc
SET cachedData=NULL
WHERE rowid IN (
   SELECT rowid FROM assoc a1 LEFT JOIN ...
);