SQLITE - 为每个唯一列对更新单行

时间:2015-01-10 21:16:22

标签: sql sqlite sql-update android-sqlite

我对SQL有基本的了解,这似乎是一项需要复杂查询的任务,以避免在程序循环中进行多次查询。

我有一个如下表格,其中'filename'为UNIQUE列:

title   subtitle    filename    comment     selected

abc     123         f1.txt      abc         0
xyz     999         f2.txt      bla         0
abc     123         f3.txt      ppp         0
poc     232         f4.txt      ppp         0
xyz     220         f5.txt      ppp         0
xyz     999         f6.txt      ppp         0

对于每个唯一(标题,副标题)对,我需要将'selected'列更新为1,只有一行(无关紧要)。这是处理查询后表格的方式:

abc     123         f1.txt      abc         1
xyz     999         f2.txt      bla         1
abc     123         f3.txt      ppp         0
poc     232         f4.txt      ppp         1
xyz     220         f5.txt      ppp         1
xyz     999         f6.txt      ppp         0

实现这一目标的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

首先,获取这些唯一行的ID:

SELECT MIN(rowid)  -- or whatever your primary key is
FROM MyTable
GROUP BY title, subtitle

(无论你使用MIN还是MAX都没关系。)

然后更新这些行:

UPDATE MyTable
SET selected = 1
WHERE rowid IN (SELECT MIN(rowid)
                FROM MyTable
                GROUP BY title, subtitle)

答案 1 :(得分:0)

在SQLite中,我认为你可以这样做:

update table
    set selected = 1
    where not exists (select 1
                      from table t2
                      where t2.name < t.name or (t2.name = t.name and t2.title < t.title)
                     );