如果未设置值,则 SQLite 将具有匹配校验和的记录设置为相同的值
SQLite set records with matching checksums to same value if value is not set
我有一个包含图像的 table:imageArchive
table 中的图像不是唯一的
有一个 校验和 字段让您知道哪些图像是相同的
记录中还包含一个userID,但很多情况下这个字段为NULL
如果具有给定校验和的一条记录具有用户 ID,如何将具有该校验和的所有记录设置为已知用户 ID?
我已经达到了:
select imageChksum from imageArchive
where userId != "NULL"
group by imagechksum
这给了我一组具有 userIds
的已知校验和
和:
select * from imageArchive
where imagechksum in
(select imageChksum from imageArchive
where userId != "NULL"
group by imagechksum)
这给了我要设置的目标列表。但是我对如何设置它们一无所知……可能很简单?我在 SQL 方面几乎是自学成才,通常会在代码中做这样的事情,但我觉得我可能接近
您可以使用 window 函数:
select imageChksum, max(userid) over(partition by imageChksum) as userid
from imageArchive
请注意,如果有两个不同的用户分配给同一个校验和,将选择最大的 id。
如果你想要一个 update
语句,我会推荐相关子查询:
update imageArchive
set userid = (select max(ia1.userid) from imageArchive ia1 where ia1.imageChksum = imageArchive.imageChksum)
where
userid is null
and exists (select 1 from imageArchive ia1 where ia1.imageChksum = imageArchive.imageChksum)
我有一个包含图像的 table:imageArchive
table 中的图像不是唯一的
有一个 校验和 字段让您知道哪些图像是相同的
记录中还包含一个userID,但很多情况下这个字段为NULL
如果具有给定校验和的一条记录具有用户 ID,如何将具有该校验和的所有记录设置为已知用户 ID?
我已经达到了:
select imageChksum from imageArchive
where userId != "NULL"
group by imagechksum
这给了我一组具有 userIds
的已知校验和和:
select * from imageArchive
where imagechksum in
(select imageChksum from imageArchive
where userId != "NULL"
group by imagechksum)
这给了我要设置的目标列表。但是我对如何设置它们一无所知……可能很简单?我在 SQL 方面几乎是自学成才,通常会在代码中做这样的事情,但我觉得我可能接近
您可以使用 window 函数:
select imageChksum, max(userid) over(partition by imageChksum) as userid
from imageArchive
请注意,如果有两个不同的用户分配给同一个校验和,将选择最大的 id。
如果你想要一个 update
语句,我会推荐相关子查询:
update imageArchive
set userid = (select max(ia1.userid) from imageArchive ia1 where ia1.imageChksum = imageArchive.imageChksum)
where
userid is null
and exists (select 1 from imageArchive ia1 where ia1.imageChksum = imageArchive.imageChksum)