表 events 有两个字段, id , photo_count
表 photos 有三个字段 , id , event_id , url 其中 event_id 是 events 表的 对应的 id
现在 photo_count 不正确 , 应该要设置成 photos 表里面对应的条数 (count) 。
那么 , 如何用一个 SQL 来更新 events.photo_count 使得其值正确呢?
表 photos 有三个字段 , id , event_id , url 其中 event_id 是 events 表的 对应的 id
现在 photo_count 不正确 , 应该要设置成 photos 表里面对应的条数 (count) 。
那么 , 如何用一个 SQL 来更新 events.photo_count 使得其值正确呢?
from events as a inner join
(select event_id,count(*) pcount from photos group by event_id) as b
on a.id=b.event_id
这样的句子在ms-sql中可以,在mysql不好使可能,不知道有没有其它方法了 :(
where t1.id=t2.id 这样的语法好像可以,你可以修改一下我上面那个sql
update events as a,(select event_id,count(*) pcount from photos group by event_id) as b
set a.photo_count = b.pcount
where a.id=b.event_id
不过 这样存在一个问题是,
count =0 的 event 可能不会被设置成0 ,(保留原值) 。
但是,按题意,应该是 0 才合适, 因为 photos 里面对应的数目的确是 0到现在为止,我找到的比较优的写法如下:
比较简洁,没有多表复合查询
update events e set photo_count = (select count(id) from photos where event_id=e.id);