gpt4 book ai didi

database - SQLite 乘以列以更新第三列

转载 作者:搜寻专家 更新时间:2023-10-30 22:27:11 25 4
gpt4 key购买 nike

我正在尝试做我认为应该是一个简单的 SQLite 操作。我想将不同表中的两列相乘,并将结果放在第一个表的新列中。以下运行,但生成一列全为 0.0:

UPDATE table 1
SET columnC = (SELECT (table1.columnB * table2.columnX)
FROM table 1
INNER JOIN table2 ON table1.columnA = table2.columnA);

如果我将 SELECT 语句隔离在括号中并单独运行它,我会得到正确的值,但我不知道如何将它们插入表中的列。

SELECT (table1.columnB * table2.columnX)
FROM table 1
INNER JOIN table2 ON table1.columnA = table2.columnA;

有什么见解吗?

最佳答案

我认为您的问题可能是您没有限制更新,因此它将更新应用于每一行的每一行,因此在它的末尾 columnC 将始终具有相同的值。

例如假设:-

DROP TABLE IF EXISTS table2;
CREATE TABLE IF NOT EXISTS table2 (columnA INTEGER,columnX INTEGER);
INSERT INTO table1 VALUES(1,5,0),(2,7,0),(3,8,0),(4,3,0);
INSERT INTO table2 VALUES(1,4),(2,3),(3,10),(4,21);

SELECT * FROM table1 JOIN table2 ON table1.columnA = table2.columnA;

结果(表未更改,所以基础数据,两个表连接突出显示是表 2 列):- enter image description here

示例 1 - 你是怎么做的

使用(您的方式,即 WHERE 被注释掉):-

UPDATE TABLE1 SET columnC = 
(SELECT (table1.columnB * table2.columnX)
FROM table1
INNER JOIN table2 ON table1.columnA = table2.columnA
--WHERE table1.columnA = 3
)
--WHERE columnA = 3
;

SELECT * FROM table1 JOIN table2 ON table1.columnA = table2.columnA

结果是(所有 ColumnC 都更改为 20,即 4 * 5,根据 Table1.ColumnA * Table2.ColumnX,其中 ColumnA 为 1):-

enter image description here

示例 2 - 使用 WHERE

限制为 1 行

添加 WHERE 然后结果是:-

enter image description here

示例 3 - 更新所有行

现在,如果您想更新所有行,那么您可以使用 WITH ... UPDATE 例如。

WITH updates(ID, newvalue) AS (
SELECT table1.columnA,
table1.columnB * table2.columnX
FROM table1
INNER JOIN table2 ON table1.columnA = table2.columnA
)
UPDATE TABLE1 SET columnC =
(
SELECT newvalue
FROM updates
WHERE table1.columnA = ID
)
;

这会导致:-

enter image description here

关于database - SQLite 乘以列以更新第三列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49745150/

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