連絡先を会社に関連付けるテーブルがあります。複数の連絡先が追加された場合、「プライマリ」または「セカンダリ」の連絡先を設定するオプションがあります。しかし、人々が連絡先を追加しているときには、この機能を使用していません。プログラムが修正され、企業に追加された最初の連絡先が自動的にプライマリとしてマークされますが、すでに入力されたデータは修正されません。SQL:列に基づいて一意の行を更新する
私はテーブルをポーリングして、CompanyIDごとに1つのレコードしかない場合は、PrimaryContactをtrueに設定しますが、これを行う方法を理解することはできません。複数の連絡先が割り当てられている会社の場合は、何もしたくありません。例:
CompanyID ContactID PrimaryContact
1 285 0
2 375 0
3 761 0
4 1744 0
4 2301 0
6 335 0
6 4987 0
9 809 0
9 2119 0
10 99 0
11 99 0
上記の例では、CompanyID4,6,9には複数のエントリがありますので、それらに触れたくありません。しかし、1、2、3、10、および11には1つのエントリしかないので、これらの行に対してPrimaryContactを1に設定したいとします。
どうすればいいですか?
update contacts
set PrimaryContact = 1
where CompanyID in (
select CompanyID
from contacts
group by CompanyID
having count(distinct ContactID) = 1
)
質問は以前のMySQLとしてタグ付けされ、以下のオリジナルの答えはそれに適応されます。
私の前のクエリが間違っていた、更新の連絡先がPrimaryContact =セットC1、このクエリをしようとした場合((SELECT COUNT(1)のコンタクトC2からどこc2.CompanyIDによってc2.CompanyID = c1.CompanyIDグループ) > 1、0、1) –