更新表列mysql中的特定值
我有这样的桌子:更新表列mysql中的特定值,mysql,Mysql,我有这样的桌子: id business_id path photo 1 11 1.jpg 0 2 11 2.jpg 0 3 15 1.jpg 0 4 15 3.jpg 0 5 15 4.jpg 0 6 21 scan1.jpg 0 7 21 scan2.jpg 0
id business_id path photo
1 11 1.jpg 0
2 11 2.jpg 0
3 15 1.jpg 0
4 15 3.jpg 0
5 15 4.jpg 0
6 21 scan1.jpg 0
7 21 scan2.jpg 0
8 22 1.jpg 1
我想更新表,以便对于每个业务,让我们在上面的业务11场景中这样说。其中一个路径的照片应设置为1
如果照片已设置为1(如business\u id
=22),则不应更改该值
我认为下面的查询将一次适用于1business\u id
:
Update business
set photo = 1
where id = 11 limit 1
但我的问题是,我怎样才能批量运行它?因此我可以一次更新所有内容。您可以尝试以下查询:
UPDATE business SET photo = 1 WHERE id IN
(SELECT MIN(id) , MAX(photo) FROM business
GROUP BY business_id HAVING max(photo) = 0)
其他信息:下一个查询将为您提供一个企业没有照片的行列表。这个问题是我回答问题的起点
SELECT business_id , MAX(photo) FROM business
GROUP BY business_id HAVING max(photo) = 0
您可以使用下面的查询来更新您的表,它将为所有照片设置为0的每个
business\u id
获取最大值,并使用join You sub select将每个business\u id
的单个记录更新为photo=1
update business b
join (select max(id) id, business_id
from business
group by business_id
having sum(photo = 0) = count(*)) t
on(b.id = t.id)
set b.photo = 1
这将导致为已经有1的id设置第二张照片为1。它不应该这样做。我跳过了
business.photo
已经有一个1的行,这个子句有max(photo)=0
如果count()被更改为0,这将是正确的,因为据我所知,他希望每个不同的id都有一张photo=1。@JoeMurray-你能告诉我要更改查询的哪一部分吗?@JoeMurray查看答案的演示部分,也sum(photo=0)=计数(*)
将确保生成的business\u id
s将所有照片设置为0,并且更新部分将仅更新每个business\u id
的1行,照片=1@MKhalidJunaid-如果我是正确的,如果我设置了最小值而不是最大值,它将标记第一张照片,而不是最后一张照片对吗?@新手我是的,你是正确的,你可以通过设置最小值使用min