2010-05-04 52 views
0

我有一个表中的一对多关系的2个表。我想运行一个更新脚本,它只会在有一个结果的情况下用相关表的FK更新表格(因为如果有多个结果,那么我们需要决定在另一个方法中使用哪一个)如何仅从另一个表中更新表如果结果计数为1?

这里是我到目前为止有:

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 

正如你所看到的,HAVING条款并不完全工作,因为我希望它。我只希望在与横幅表的旗帜ID导入表更新该行如果计数等于1

回答

1

如何在这种情况下大约

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

,它总是会产生1因为banner_id是唯一的。 – 2010-05-04 20:51:08

+0

我想他们已经离开了你的计数(b1.banner_id)。只是适应从计划表中选择计数。 – 2010-05-04 21:02:01

+0

我接受这个,因为它是我解决方案的基础。我还会对其进行编辑以使其对我的场景准确无误。 – 2010-05-04 21:14:17

相关问题