Comment puis-je mettre à jour un tableau d'une autre table uniquement si le compte de résultat est 1?

StackOverflow https://stackoverflow.com/questions/2768752

Question

J'ai une table de 2 tables dans une relation un à plusieurs. Je veux lancer un script de mise à jour qui mettra à jour la table avec le FK de la table correspondante que s'il y a un résultat (parce que s'il y a plusieurs, nous devons alors décider lequel utiliser, dans une autre méthode)

Voici ce que j'ai jusqu'à présent:

UPDATE import_hourly_event_reports i
   SET i.banner_id = b.banner_id
  FROM banner b
  JOIN plan p ON b.plan_id = p.id
 WHERE b.campain_id = i.campaign_id
   AND b.size_id = i.size_id
   AND p.site_id = i.site_id
HAVING COUNT(b.banner_id) = 1

Comme vous pouvez le voir, la clause de HAVING ne fonctionne pas tout à fait comme je m'y attendais pas. Je veux seulement mettre à jour la ligne de la table d'importation avec l'identifiant de la bannière de la table bannière si le nombre est égal à 1.

Était-ce utile?

La solution

Qu'en est-

UPDATE import_hourly_event_reports i
   SET i.banner_id = b.banner_id
  FROM banner b
  JOIN plan p ON b.plan_id = p.id
 WHERE b.campain_id = i.campaign_id
   AND b.size_id = i.size_id
   AND p.site_id = i.site_id
   AND (SELECT COUNT(b1.banner_id)
          FROM banner b1
          JOIN plans p1 ON b1.plan_id = p1.id
         WHERE b1.campain_id = i.campaign_id
           AND b1.size_id = i.size_id
           AND p1.site_id = i.site_id) = 1
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top