我正在尝试使用其他表中的数据进行更新。我试过了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
答案 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
)
);