gpt4 book ai didi

sqlite - 从同一个表中的列值更新 sqlite 表中的列

转载 作者:行者123 更新时间:2023-12-03 16:00:13 27 4
gpt4 key购买 nike

我已经搜索并找到了大量示例,但仍在努力完成这项工作。

我在 SQLite 中有下表:

SELECT * FROM TableA;

ID|USER|NAME|PARENT
1|User1|SomeName|-1
2|User1|SomeOtherName|1
3|User2|SomeName|-1
4|User2|SomeOtherName|-1

ID 2 的 NAME 为 SomeOtherName 的 PARENT 是 ID 1 - 这是正确的。

ID 4 的 NAME 为 SomeOtherName 的 PARENT 是 ID -1 - 这是不正确的。应该是ID 3。

我有很多这样的错误记录(所有记录都具有相同的 SomeOtherName NAME 和 -1 PARENT )。

将它们联系在一起的列是 USER。

我需要使用正确的父 ID 更新所有不正确的记录。

我尝试了以下方法无济于事:
DROP TABLE orphans;

CREATE TEMP TABLE orphans as
SELECT TableA.id, TableA.user, TableA.name FROM TableA WHERE TableA.name = 'SomeOtherName' AND TableA.parent = -1;

UPDATE TableA
SET parent = ( SELECT TableA.id
FROM TableA
INNER JOIN orphans
ON TableA.name = 'SomeName' AND orphans.user = TableA.user
)
WHERE TableA.user IN ( SELECT TableA.user
FROM TableA WHERE TableA.name = 'SomeOtherName' AND TableA.parent = -1 )
;

我似乎无法正确理解。任何帮助将不胜感激。

最佳答案

据我所知,sqlite 对于 UPDATE 中的复杂查询的功能非常有限。陈述。您不能使用多个表,而且我还没有找到从子查询中引用当前行中的值的方法。

相反,我想出了这个:

SELECT id, user, name,
CASE name = 'SomeOtherName' AND parent = -1
WHEN 1 THEN (
SELECT MAX(id)
FROM TableA A2
WHERE A1.user = A2.user
AND A2.name != 'SomeOtherName'
) ELSE parent END AS parent
FROM TableA A1;

这应该是你想要的数据吧?您可以将其写入临时表,然后将数据从那里反馈回原始表。这种反馈可以使用 REPLACE 来完成。如果您有唯一键,或使用 DETELTE其次是 INSERT如果不。我创建了 an example of the latter on sqlfiddle .

关于sqlite - 从同一个表中的列值更新 sqlite 表中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11870623/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com