更新表列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),则不应更改该值

我认为下面的查询将一次适用于1
business\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