2017-06-08 3 views
0

J'essaie de faire une mise à jour en utilisant les données d'une autre table. J'ai essayé this answer (la deuxième partie), mais cela ne fonctionne pas pour moi. Je reçois un message d'erreur générique d'erreur de syntaxe.Comment mettre à jour à partir d'un SELECT dans Informix?

J'ai également essayé this solution et j'ai également reçu un message d'erreur de syntaxe.

Si je tente de mettre à jour une seule colonne, il fonctionne:

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

Mais je dois mettre à jour des colonnes de multiples. Malheureusement, cela ne fonctionne pas:

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

Informix version est 12.10.FC8

Répondre

4

Il vous manque plus 1 jeu de parenthèses autour de la sous-requête. De l'Informix manual:

La sous-requête doit être sont mises entre parenthèses. Ces parenthèses sont imbriquées entre les parenthèses qui suivent immédiatement le signe égal ( =). Si la liste d'expression comprend plusieurs sous-requêtes, chaque sous-requête doit être placée entre parenthèses, par une virgule (,) séparant les sous-requêtes successives:

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

Les exemples suivants montrent l'utilisation de sous-requêtes dans la clause 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; 

donc, pour que votre mise à jour soit accepté par Informix il doit être:

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

Ça a marché! Merci! – Zanon