2010-05-04 5 views
0

J'ai une table de 2 tables dans une relation un à plusieurs. Je veux exécuter un script de mise à jour qui mettra à jour la table avec le FK de la table liée seulement s'il y a un résultat (parce qu'il y a un multiple alors nous devons décider lequel utiliser, dans une autre méthode)Comment mettre à jour une table à partir d'une autre table uniquement si le nombre de résultats est 1?

Ici est 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 HAVING ne fonctionne pas tout à fait comme je l'avais s'y attendait 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.

Répondre

1

Que diriez-vous

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 
+0

dans ce cas, il sera toujours donné 1 parce que banner_id est unique. –

+0

Eh bien, ils partaient de votre compte (b1.banner_id) je pense. Juste adapter à sélectionner le compte de la table de plan à la place. –

+0

Je l'accepte, car c'était la base de ma solution. Je vais également l'éditer pour le rendre précis à mon scénario. –

Questions connexes