如何从Informix中的SELECT更新?

时间:2017-06-08 22:11:02

标签: sql informix

我正在尝试使用其他表中的数据进行更新。我试过了this answer(第二部分),但它对我不起作用。我收到了语法错误的一般错误消息。

我也尝试了this solution并收到了语法错误消息。

如果我尝试只更新一列,则可以:

UPDATE dogs
SET name = 
    (
        SELECT 'Buddy'
        FROM systables 
        WHERE tabid = 1
     );

但我需要更新多列。不幸的是,这不起作用:

UPDATE dogs
SET (name, breed) = 
    (
        SELECT 'Buddy', 'pug'
        FROM systables 
        WHERE tabid = 1
    );

Informix版本为12.10.FC8

1 个答案:

答案 0 :(得分:4)

您在子查询周围缺少一组括号。 来自Informix manual

  

子查询必须括在括号中。这些括号   嵌套在紧跟平等的括号内(   =)标志。如果表达式列表包含多个子查询,则每个子查询必须括在括号中,并带有逗号(,)   分隔连续的子查询:

UPDATE ... SET ... = ((subqueryA),(subqueryB), ... (subqueryN))
     

以下示例显示了SET子句中子查询的用法:

UPDATE items    
SET (stock_num, manu_code, quantity) = 
  ( 
    (
      SELECT stock_num, manu_code 
       FROM stock     
       WHERE description = 'baseball'
    ),
    2
  )    
WHERE item_num = 1 AND order_num = 1001;

UPDATE table1    
SET (col1, col2, col3) =
  (
    (
      SELECT MIN (ship_charge), MAX (ship_charge) 
      FROM orders
    ),
    '07/01/2007'
  )
WHERE col4 = 1001;

因此,为了让您的更新被Informix接受,它必须是:

UPDATE dogs
SET (name, breed) = 
  (
    (
      SELECT 'Buddy', 'pug'
      FROM systables 
      WHERE tabid = 1
    )
  );