Come faccio ad aggiornare una tabella da un altro tavolo solo se il conteggio risultato è 1?

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

Domanda

Ho una tabella di 2 tavoli in un uno a molti. Voglio eseguire uno script di aggiornamento che aggiornerà la tabella con l'FK della tabella correlata solo se v'è un risultato (perché se non c'è più, allora dobbiamo decidere quale usare, in un altro metodo)

Ecco quello che ho finora:

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

Come si può vedere, la clausola HAVING non del tutto funziona come mi aspetto di esso. Ho solo voglia di aggiornare la riga nella tabella di importazione con l'ID del banner dal tavolo striscione se il conteggio è pari a 1.

È stato utile?

Soluzione

Come su

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top