我正在尝试做我认为应该是一个简单的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;
有什么见解?
答案 0 :(得分:2)
我认为您的问题可能是您没有限制更新,因此它会将其应用于每一行的每一行,因此在 columnC 结尾处将是相同的值。
e.g。假设: -
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列): -
使用(你的方式,即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 ,即根据Table1.ColumnA * Table2.ColumnX为4 * 5,其中ColumnA为1): -
WHERE
添加WHERE
,然后结果是: -
现在,如果您想要更新所有行,那么您可以使用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
)
;
哪会导致: -