¿Cómo se actualiza una tabla de otra tabla sólo si el resultado es 1 Conde?
-
03-10-2019 - |
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.
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