【问题标题】:Sqlite Update with Select subquery only chosing first value使用 Select 子查询的 Sqlite 更新仅选择第一个值
【发布时间】:2018-03-29 17:17:42
【问题描述】:

我很难在 Sqlite 中使用 UPDATE 命令来使用子查询选择语句在另一个表中找到的新值更新所有记录。它使用在 Table2 列中找到的第一个值错误地更新了 Table1 中的每一列。 当我单独运行查询的选择部分时,它运行良好并返回所有正确的值。它基本上是从名为 Adjustment 的查找表中查找 300000 倍数中最接近的值。

代码:

Update TEMP1
    set New_position = 
    (
        select (Temp1.Col1 + Adjustment.Offset)  as NewValue
        from Adjustment, TEMP1
        where Adjustment.LookupValue = cast(TEMP1.Col1 / 300000 as Int) * 300000 
    ) 

【问题讨论】:

    标签: sqlite select subquery


    【解决方案1】:

    您正在尝试使用correlated subquery

    用作标量子查询或 IN、NOT IN 或 EXISTS 表达式的右侧操作数的 SELECT 语句可能包含对外部查询中列的引用。这样的子查询称为相关子查询。每次需要其结果时,都会重新评估相关子查询。一个不相关的子查询只被评估一次,结果在必要时被重用。

    但是您的子查询实际上并不包含对外部查询中列的引用;内部查询中的FROM Temp1Temp1 表的一个新实例,Temp1.Col1 指的是它。 Temp1.Col1 的值来自Temp1 中的某个随机行。

    只需从 FROM 子句中删除 Temp1

    UPDATE Temp1
    SET New_position = (SELECT Temp1.Col1 + Adjustment.Offset
                        FROM Adjustment
                        WHERE LookupValue = CAST(Temp1.Col1 / 300000 AS INT) * 300000);
    

    【讨论】:

    • 太棒了!做到了。非常感谢
    • @DaveP 如果它解决了您的问题,您应该接受答案...
    猜你喜欢
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-17
    相关资源
    最近更新 更多