2011-11-14 4 views
7

私は多対多の関係を形成する3つのテーブルcontact、domains、contacts_domainsを持っています。MySQLアップデートサブセット

contacts_domainsテーブルを更新するクエリを実行したいが、連絡先が1つしかないドメインの場合のみ。

私は興味のある行を選択する方法を知っていますが、更新する方法はわかりません。

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

これらの結果すべてに対してcontacts_domains.dominant = 1を設定します。

ありがとうございます!

答えて

-4

最も簡単な解決策:

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 
) 

編集。

+7

を助けることを願っています: '' ERROR 1093(HY000):あなたはターゲットを指定することはできませんFROM句での更新のための 'cd'テーブル ' –

+0

は上記のように動作しません。 – sym

28

このような問題がありました。選択して作るのテーブルに参加してみてください。

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 
MySQLは、以下で失敗してしまうため

が、それはこれが動作しません

+9

非常にシンプル:piotreksの答えが正しいと動作し、受け入れられた答えが間違っている(コメントに記載されているように)動作しません – bytepirate

+0

これは私のために働いた。ありがとう – sym