1323 votes

Comment puis-je faire une instruction UPDATE avec JOIN dans SQL?

J'ai besoin de mettre à jour cette table dans SQL Server 2005 avec les données de sa table 'parent', voir ci-dessous:

vente

 id (int)
udid (int)
assid (int)
 

ud

 id  (int)
assid  (int)
 

sale.assid contient la valeur correcte pour mettre à jour ud.assid . Quelle requête va faire cela? Je pense à une jointure mais je ne suis pas sûr que ce soit possible.

2397voto

Eric Points 35647

Cela dépend beaucoup de la base de données que vous utilisez. Voici les moyens de le faire dans la norme ANSI (aka devrait fonctionner sur n'importe quelle base de données), MySQL, SQL Server et Oracle. Noter que la méthode ANSI sera beaucoup plus lent que les deux autres méthodes, mais si vous n'êtes pas à l'aide de MySQL, SQL Server, Oracle, c'est la seule façon d'aller.

ANSI:

update ud 
  set assid = (
               select sale.assid 
                 from sale 
                where sale.udid = ud.udid
              )
 where exists (
               select * 
                 from sale 
                where sale.udid = ud.udid
              );

MySQL:

update ud u
inner join sale s on
    u.id = s.udid
set u.assid = s.assid

SQL Server:

update u
set u.assid = s.assid
from ud u
    inner join sale s on
        u.id = s.udid

Oracle:

update
    (select
        u.assid as new_assid,
        s.assid as old_assid
    from ud u
        inner join sale s on
            u.id = s.udid) up
set up.new_assid = up.old_assid

144voto

edosoft Points 7783
<p>Cela devrait fonctionner en MSSQL :<pre><code></code></pre></p>

100voto

user1154043 Points 197
<p>Postgres<pre><code></code></pre></p>

50voto

MattH Points 1737
<p>Une approche SQL standard serait<pre><code></code></pre><p>Sur SQL Server, vous pouvez utiliser une jointure</p><pre><code></code></pre></p>

39voto

alfonx Points 1487
<p><a href="http://www.postgresql.org/docs/9.3/static/sql-update.html" rel="nofollow">PostgreSQL</a>:<pre><code></code></pre></p>

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