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)
我对 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)