Pregunta

Tengo una tabla de 2 tablas en una relación uno a muchos. Quiero ejecutar un script de actualización que actualizará la tabla con el FK de la tabla relacionada sólo si hay un resultado (porque si hay múltiples entonces tenemos que decidir cuál de ellos para su uso, en otro método)

Esto es lo que tengo hasta ahora:

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

Como se puede ver, la cláusula HAVING no acaba de funcionar como me esperaba. Sólo quiero actualizar la fila en la tabla de importación con el id de la bandera de la mesa bandera si el recuento es igual a 1.

¿Fue útil?

Solución

¿Qué tal

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top