2017-10-04 3 views
0

Je cette requête SQL:mise à jour d'une table avec le groupe par et count = 1 dans une base MySQL

SELECT * 
FROM caduti 
GROUP BY foto 
HAVING count(foto) = 1 

Je tableau caduti avec valeur en double dans la colonne foto et la nécessité de mettre à jour la colonne foto_ok avec la valeur de la colonne foto uniquement pour les valeurs uniques dans la colonne.

J'ai essayé plusieurs UPDATE comme celui-ci

UPDATE caduti 
SET foto_ok=foto 
FROM (
SELECT * 
FROM caduti 
GROUP BY foto 
HAVING count(foto) = 1 
) 

, mais je ne peux pas comprendre comment le faire fonctionner. De l'aide?

Répondre

0

Vous pouvez obtenir l'unique foto à partir d'une requête interne, puis appliquer une auto-jointure et mettre à jour toutes les lignes.

UPDATE (SELECT foto 
FROM caduti 
GROUP BY foto 
HAVING count(foto) = 1) u 
INNER JOIN caduti AS c ON c.foto = u.foto set foto_ok=u.foto; 
+0

Ne comprenez pas u et c ce qui signifie. J'ai essayé la requête telle qu'elle est, mais donnez-moi 6 erreur statique et une erreur sql # 1052 - Colonne: 'foto' de la liste des champs est 'ambigu – Pier67

+0

@ Pier67 bien sûr, vous obtenez l'erreur. Parce que la colonne foto était ambiguë. J'ai mis à jour la réponse. De plus, u et c ne sont que des alias. Je ne sais pas, comment vous n'êtes pas au courant du nom d'alias. – Ravi

+0

Je sais ce que sont les noms d'alias, mais il me faut du temps pour comprendre comment l'utiliser parce que je suis un débutant. En fin de compte, je remplace caduti pour c et laissez vous comme c'est et ça marche! Donc merci beaucoup! – Pier67