2010-06-15 15 views

Répondre

3

Vous pouvez utiliser une sous-requête corrélée comme ci-dessous. Cela suppose qu'il y aura exactement une valeur correspondante renvoyée. Cela déclenchera une erreur si plus d'une valeur correspondante est renvoyée ou définira le champ sur null si zéro est renvoyé. Si ce dernier comportement n'est pas souhaitable, vous aurez besoin d'une clause where.

UPDATE table1 
SET field1 = (SELECT DISTINCT table2.ValueColumn 
       FROM table2 
       WHERE table2.JoinColumn = table1.JoinColumn) 

Modifier

Pour examiner les dossiers avec 0 ou plus de 1 matchs, vous pouvez utiliser

SELECT table1.JoinColumn, COUNT(DISTINCT table2.ValueColumn) 
FROM table1 
LEFT JOIN table2 
ON table2.JoinColumn = table1.JoinColumn 
GROUP BY table1.JoinColumn 
HAVING COUNT(DISTINCT table2.ValueColumn) <> 1 
+0

Ouais tu as raison, merci. Je n'ai pas pensé à cette possibilité. – Nicolas

+0

@Nicolas Il y a probablement une syntaxe JOIN pour cela aussi. Il y a dans SQL Server mais je ne suis pas sûr que c'est la même chose dans MySQL –

+0

@Martin Je suis actuellement en train de le tester et je ne peux pas me débarrasser de cette erreur: 'La sous-requête retourne plus de 1 rangée' malgré l'ajout de DISTINCT dans le sous-requête. – Nicolas