web-dev-qa-db-fra.com

Mettre à jour une colonne par le nombre d'une autre table

Ce pourrait être une question naïve, mais quelle est la différence de ces deux requêtes et qui est préférée?

UPDATE table1, 
(SELECT id,COUNT(*) idcount FROM table2 GROUP BY id) AS B 
SET table1.Freq = B.idcount WHERE table1.id=B.id

et

UPDATE table1 A INNER JOIN 
(SELECT id,COUNT(*) idcount FROM table2 GROUP BY id) B USING (id) 
SET A.Freq = B.idcount
2
Googlebot

Même requête. Différente syntaxe de jointure.

Le premier est l'ancien style ANSI, ce dernier est plus tard ANSI. Si vous devez choisir entre eux, choisissez ce dernier.

Je n'utiliserais aucun d'entre eux en raison des limitations d'utilisation (ne peut pas être aliasé). Au lieu de cela, écrivez comme:

UPDATE table1 A 
INNER JOIN (SELECT id,COUNT(*) idcount FROM table2 GROUP BY id) as B
  ON B.id = A.id 
SET A.Freq = B.idcount

Voir cette réponse oracle sur la raison pour laquelle USING _ ne doit pas être préféré: https://stackoverflow.com/questions/456684/Mixing-and-and-on-in-oracle-ansi-join

Et voici une discussion similaire pour SQL Server: https://stackoverflow.com/questions/1599050/ans-vs-non-ansifsql-join-syntax

En général, utilisez-vous pour écrire SQL Syntax de manière portable. Bien que vous ne puissiez jamais porter votre code, vous pourrez au moins être capable de porter vos compétences autour de plusieurs bases de données (ce qui est généralement une chose cool à faire pour éviter de devenir un poney d'un truc).

3
Thomas Kejser