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

SQLITE - Updating a single row for each unique column pair

我对 SQL 有真正的基础知识,这似乎是一项需要复杂查询以避免在程序循环中执行多个查询的任务。

我有一个 table,例如下面的 '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(无论是哪一行)。这是处理查询后 table 的样子:

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

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

在 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)
                     );

首先,获取那些唯一行的 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)