2009-11-03 8 views
2

J'ai une table dans laquelle j'ai ajouté une nouvelle colonne et je souhaite écrire une instruction SQL pour mettre à jour cette colonne en fonction des informations existantes. Voici les deux tables et les colonnes pertinentesMise à jour des enregistrements dans Postgres à l'aide de sous-sélections imbriquées

 
'leagues' 
=> id 
=> league_key 
=> league_id (this is the new column) 
 
'permissions' 
=> id 
=> league_key 

Maintenant, ce que je veux faire, en anglais simple, est-ce

Set leagues.league_id to be permissions.id for each value of permissions.league_key

j'avais essayé SQL comme ceci:

ligues UPDATE SET league_id = (SELECT id partir de permissions OÙ league_key = (S ELECT distincte (league_key) des ligues)) OU league_key = (SELECT distinct (league_key) des ligues)

mais je reçois un message d'erreur qui dit

ERREUR: plus d'une ligne renvoyée par un sous-requête utilisé comme une expression

Toute aide pour ce serait grandement apprécié

Répondre

1

Lorsque vous faites une sous-requête en tant qu'expression, elle ne peut pas renvoyer un jeu de résultats. Votre sous-requête doit évaluer un seul résultat. L'erreur que vous voyez est parce que l'une de vos sous-requêtes renvoie plus d'une valeur.

Here is the relevant documentation for pg84:

11

en fonction de vos besoins de

Set leagues.league_id à permissions.id pour chaque valeur de adm ions.league_key

Cela fait cela.

UPDATE leagues 
SET league_id = permissions_id 
FROM permissions 
WHERE permissions.league_key = leagues.league_key; 
+0

je devais changer leagues.league_id à league_id, mais cela a fonctionné parfaitement! Merci beaucoup – GrumpyCanuck

Questions connexes