79 votes

sql: comment mettre à jour les valeurs d'une table avec le même nom d'utilisateur?

J'ai deux tables, avec une même colonne nommée user_name, en disant table_a, table_b. Je veux, copier de table_b, column_b_1, column_b2, vers table_b1, column_a_1, column_a_2, où le nom d'utilisateur est le même, comment le faire dans l'instruction SQL?

138voto

martin clayton Points 41306

Tant que vous avez adapté les index en place cela devrait fonctionner très bien:

UPDATE table_a
SET
      column_a_1 = (SELECT table_b.column_b_1 
                            FROM table_b
                            WHERE table_b.user_name = table_a.user_name )
    , column_a_2 = (SELECT table_b.column_b_2
                            FROM table_b
                            WHERE table_b.user_name = table_a.user_name )
WHERE
    EXISTS (
        SELECT *
        FROM table_b
        WHERE table_b.user_name = table_a.user_name
    )

Mise à JOUR en sqlite3 ne prend pas en charge une clause from, ce qui en fait un peu plus de travail que dans les autres SGBDR.

Si la performance n'est pas satisfaisante, une autre option pourrait être de construire de nouvelles lignes pour les table_a l'aide d'une sélection et à rejoindre table_a dans une table temporaire. Ensuite, supprimez les données de table_a et de repeupler de la temporaire de.

1voto

fiendniu Points 11

Dans la clause WHERE EXISTS,

Est-ce obligatoire "SELECT * FROM table_b WHERE table_b.nom_utilisateur = table_a.nom_utilisateur"

toute différence si vous ne sélectionnez que toutes les lignes d'une colonne, telles que

"SELECT nom_utilisateur FROM table_b WHERE table_b.nom_utilisateur = table_un.nom_utilisateur"

La différence, je veux dire la performance sera plus rapide?

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