SQLite乘以列以更新第三列

时间:2018-04-10 04:07:29

标签: database sqlite

我正在尝试做我认为应该是一个简单的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;

有什么见解?

1 个答案:

答案 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列): - 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 ,即根据Table1.ColumnA * Table2.ColumnX为4 * 5,其中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