2011-11-14 37 views
7

Tôi có ba bảng: danh bạ, tên miền và contacts_domains, hình thành mối quan hệ nhiều-nhiều.Tập hợp cập nhật MySQL Có

Tôi muốn chạy truy vấn cập nhật bảng contacts_domains, nhưng chỉ cho các tên miền có chính xác một liên hệ.

Tôi biết cách CHỌN các hàng mà tôi quan tâm, nhưng không phải cách cập nhật chúng.

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

Tôi muốn đặt contacts_domains.dominant = 1 cho tất cả các kết quả này.

Cảm ơn!

Trả lời

-4

Giải pháp đơn giản nhất:

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.

+7

này không làm việc vì MySQL sẽ thất bại với những điều sau đây: '' ERROR 1093 (HY000): Bạn có thể không xác định mục tiêu bảng 'cd' để cập nhật trong mệnh đề FROM'' –

+0

không hoạt động như đã nói ở trên. – sym

28

Tôi gặp vấn đề như thế này. Hãy thử với tham gia với bảng thực hiện với chọn:

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 

Hy vọng nó sẽ giúp

+9

rất đơn giản: piotreks câu trả lời là chính xác và hoạt động, câu trả lời được chấp nhận là sai một không hoạt động (như đã đề cập trong các bình luận) – bytepirate

+0

này làm việc cho tôi. Cảm ơn – sym

Các vấn đề liên quan