我对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
实现这一目标的最佳方法是什么?
答案 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)
);