La syntaxe dépend strictement du SGBD SQL que vous utilisez. Voici quelques façons de procéder en ANSI/ISO (qui devrait fonctionner avec n'importe quel SGBD SQL), MySQL, SQL Server et Oracle. Sachez que la méthode ANSI/ISO que je suggère sera généralement beaucoup plus lente que les deux autres méthodes, mais si vous utilisez un SGBD SQL autre que MySQL, SQL Server ou Oracle, il se peut que ce soit la seule solution (par exemple, si votre SGBD SQL ne prend pas en charge le format MERGE
) :
ANSI/ISO :
update ud
set assid = (
select sale.assid
from sale
where sale.udid = ud.id
)
where exists (
select *
from sale
where sale.udid = ud.id
);
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
PostgreSQL :
update ud
set assid = s.assid
from sale s
where ud.id = s.udid;
Notez que la table cible ne doit pas être répétée dans le fichier FROM
pour Postgres.
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
SQLite :
update ud
set assid = (
select sale.assid
from sale
where sale.udid = ud.id
)
where RowID in (
select RowID
from ud
where sale.udid = ud.id
);
0 votes
Des relations entre les tables ? Comment peut-on savoir quel enregistrement de sale correspond à quel enregistrement de ud ? Est-ce basé sur l'id comme clé primaire dans les deux tables ?
0 votes
Comment pouvez-vous mettre à jour UD ? Il n'a que l'assiduité et son propre ID. Pourriez-vous donner un exemple en termes de valeurs réelles qui existent, et les enregistrements que vous voudriez modifier ou ajouter à la suite du script ?
3 votes
Voir aussi la question SO ... stackoverflow.com/questions/982919/sql-update-query-using-joins
2 votes
Alias de l'utilisateur dans une requête comme stackoverflow.com/questions/982919/sql-update-query-using-joins