【问题标题】:SQLITE. Update mulptiple columns with CASE expressionSQLITE。使用 CASE 表达式更新多个列
【发布时间】:2019-12-12 00:15:30
【问题描述】:

我有 2 个柜台。如果回调数据是正数,我将喜欢计数器加 1,如果为负,我将不喜欢计数器加 1。但是我当前的代码抛出了一个语法错误。

cursor.execute("""
UPDATE posts SET
likes_count = CASE WHEN (?) > 0 THEN
likes_count = likes_count + 1 ELSE likes_count END
dislikes_count = CASE WHEN (?) < 0 THEN
dislikes_count = dislikes_count + 1 ELSE dislikes_count END
WHERE id = ?""", (data,abs(data),))

【问题讨论】:

    标签: sql sqlite


    【解决方案1】:

    试试:

    cursor.execute("""
    UPDATE posts SET
        likes_count = CASE WHEN (?) > 0 THEN likes_count + 1 
                           ELSE likes_count 
                      END,
        dislikes_count = CASE WHEN (?) < 0 THEN dislikes_count + 1 
                              ELSE dislikes_count 
                         END
        WHERE id = ?""", (data,data,abs(data),))
    

    每个字段更新语句必须解析为单个值,您的 case 语句除了返回单个值之外不能任何事情。 只需删除 case 语句中的赋值,其余的都是有效的。

    THEN likes_count = likes_count + 1 ELSE …
    应该 THEN likes_count + 1 ELSE …

    然后你必须用逗号分隔每个字段更新语句,

    最后请注意,您必须为每个? 传递一个参数。此脚本中有 3 个?,因此您需要 3 个输入。

    【讨论】:

    • 不幸的是,这不起作用。我复制了这段代码,得到了以下错误,sqlite3.OperationalError: near "dislikes_count": syntax error
    • 对不起,忘了逗号 :),我已经更新了回复
    • 是的,我也通过以下问题解决了这个问题stackoverflow.com/questions/2334712/… 只是试图逃避双重情况并通过else 实施(或至少逃避双重其他),但这都是不可能的:)
    • 我没有任何设置来测试这个脚本,但看起来你还需要提供一个额外的输入参数
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-24
    • 2020-08-06
    • 2020-02-20
    • 2012-10-03
    • 2021-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多