2 votes

Postgresql - utiliser JOIN avec UPDATE

Je veux UPDATE ligne du tableau dans member_network table utilisant WHERE clause par team_id = 91 et en utilisant JOIN .

Table principale member_network ressemble à une structure :

| id |  network_profile_name |                              
|----------------------------|
|  1 |    John Doe           |

J'ai deux champs dans deux tables plus connectées avec les valeurs dont j'ai besoin.

Tableau team_member_network ressemble à une structure :

| id | team_member_id | member_network_id |
|----|----------------|-------------------|
|  2 |             1  |                 1 |

Tableau team_member :

| id    | team_id | member_id |
| ------|---------|-----------|
| 1     |      91 |   1679817 |   

C'est une sorte de relation inversée

Mon travail jusqu'à présent :

   UPDATE member_network
        SET
            network_profile_name = 'James Bond'
        JOIN team_member_network
            ON member_network.id = team_member_network.member_network_id
        JOIN team_member
            ON team_member_network.team_member_id = team_member.id
        WHERE team_id = 91;

Avec une erreur :

Erreur de syntaxe : 7 ERREUR : erreur de syntaxe à ou près de "JOIN\".

Travaux sur SELECT mais comment utiliser JOIN lors de la mise à jour de la ligne sélectionnée ? Les articles connexes que j'ai trouvés n'ont pas aidé dans mon cas

1voto

a_horse_with_no_name Points 100769

Je ne vois pas pourquoi vous auriez besoin de JOIN pour cela :

UPDATE member_network mn
  SET network_profile_name = 'James Bond'
WHERE EXISTS (SELECT *
              FROM team_member_network tmn
                JOIN team_member tm ON tmn.team_member_id = tm.id
              WHERE mn.id = tmn.member_network_id
                AND tm.team_id = 91);

Si vous voulez vraiment "joindre" les tables, vous devez le faire dans la clause WHERE de l'instruction UPDATE. Comme indiqué dans le manuel vous avez besoin d'une clause FROM d'abord - mais cela devrait pas répéter la table cible.

UPDATE member_network mn
  SET network_profile_name = 'James Bond'
FROM team_member_network tmn
  JOIN team_member tm ON tmn.team_member_id = tm.id
WHERE mn.id = tmn.member_network_id --<< this is the "join" to the target table
  AND tm.team_id = 91;

0voto

Vasanth R Points 49

Il suffit de supprimer la virgule (,) à la fin de la ligne.

network_profile_name = 'James Bond',

puis essayez, cela devrait fonctionner

0voto

Lajos Arpad Points 5986

Elle l'est :

update table1 t1
set t1.field = t2.'value'
from table2 t2
where t1.id = t2.t1_id

Dans votre cas :

   UPDATE member_network
        SET
            network_profile_name = 'James Bond'
        FROM team_member
        JOIN team_member
            ON team_member_network.team_member_id = team_member.id
        WHERE team_id = 91 and
            member_network.id = team_member_network.member_network_id

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X