Come faccio ad aggiornare una tabella da un altro tavolo solo se il conteggio risultato è 1?
-
03-10-2019 - |
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.
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