【问题标题】:Using CASE statement to INSERT values into multiple columns in SQLite使用 CASE 语句将值插入 SQLite 中的多个列
【发布时间】:2021-12-14 11:39:33
【问题描述】:

我正在尝试使用 INSERT 语句将值添加到新表中的几列,具体取决于另一个表中列的值。我正在用 SQLite 写作。我受到in sqlite update trigger with multiple if/Case Conditions 这个问题的启发,它在其中一列中使用了 CASE 语句,但我想应用于我添加的所有列。

我写的代码类似于:

CREATE TABLE machine_info (
    MachineType TEXT,
    MaxPower INTEGER,
    Frequency REAL);

INSERT INTO machine_info (MachineType, MaxPower, Frequency)
    VALUES (
    CASE WHEN parts.Machine = "A" THEN "Diode", 200, 60
         WHEN parts.Machine = "B" THEN "AC", 500, 50
         WHEN parts.Machine = "C" THEN NULL, 500, NULL 
    );

错误消息显示Result: near ",": syntax error。我是否将 CASE 语句包装在错误的位置?

【问题讨论】:

  • 此问题已被编辑。最初的问题看起来我会在现有表中填写新列。在这种情况下,使用 UPDATE 作为@forpas 回答将是正确的方法。或者将“机器”列复制到新表中,更新表并删除列,尽管 SQLite 目前不支持删除列。

标签: sql sqlite sql-insert


【解决方案1】:

您可以使用 INSERT INTO ... SELECT,但您需要为 3 列中的每一列使用 CASE 表达式:

INSERT INTO machine_info (MachineType, MaxPower, Frequency)
SELECT
    CASE Machine WHEN 'A' THEN 'Diode' WHEN 'B' THEN 'AC' END,
    CASE Machine WHEN 'A' THEN 200 WHEN 'B' THEN 500 WHEN 'C' 500 END,
    CASE Machine WHEN 'A' THEN 60 WHEN 'B' THEN 50 END
FROM machine_info
WHERE Machine IN ('A', 'B', 'C');

【讨论】:

  • 谢谢!这非常有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-14
  • 2010-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-27
相关资源
最近更新 更多