MySQL Update Subset Having

2019-04-22 20:29发布

I have three tables: contacts, domains, and contacts_domains, which form a many-to-many relationship.

I would like to run a query that updates the contacts_domains table, but only for domains that have exactly one contact.

I know how to SELECT the rows I'm interested in, but not how to UPDATE them.

SELECT domain_id, contact_id, dominant
FROM contacts_domains
GROUP BY domain_id
HAVING COUNT(contact_id) = 1

I want to set contacts_domains.dominant = 1 for all these results.

Thanks!

标签: mysql having
2条回答
唯我独甜
2楼-- · 2019-04-22 20:48

I had problem like this. Try with joining with table make with select:

UPDATE contacts_domains cd, 
 (SELECT id FROM contacts_domains GROUP BY domain_id
   HAVING COUNT(contact_id) = 1) AS cdtmp
SET cd.dominant = 1
WHERE cd.id = cdtmp.id

Hope it will help

查看更多
3楼-- · 2019-04-22 20:58

The simplest solution:

UPDATE contacts_domains cd SET cd.dominant = 1
WHERE cd.id IN (
SELECT dominant_id
FROM contacts_domains
GROUP BY domain_id
HAVING COUNT(contact_id) = 1
)

Edited.

查看更多
登录 后发表回答