web-dev-qa-db-ja.com

SQLは別のテーブルの別の列から1つの列を更新します

私はこれの前に様々な投稿を読みました。しかし、どれも私のために働くようには見えませんでした。

タイトルが示すように、別のテーブルの列から1つの列を更新しようとしています。これまで問題があったことを覚えていません。

1。 テーブル:user_settings.contact_id、contacts.idで更新したいwhere (user_settings.account_id == contacts_account_id)

2。 以前は、連絡先はaccount_idを介してユーザーアカウントにリンクされていました。ただし、今度はuser_settingsを介してcontacts.idに連絡先をリンクします

以下は私が試したことのいくつかの例ですが、どれもうまくいきませんでした。 A.)なぜ機能しないのか、B。)代わりに何をすべきか、に興味があります。

例A:

UPDATE user_settings
SET user_settings.contact_id = contacts.id 
FROM user_settings 
INNER JOIN contacts ON user_settings.account_id = contacts.account_id

例B:

UPDATE (SELECT A.contact_id id1, B.id id2
  FROM user_settings A, contacts B
  WHERE user_settings.account_id = contacts.account_id)
SET id1 = id2

例C:

UPDATE user_settings
SET user_settings.contact_id = (SELECT id
  FROM contacts
  WHERE (user_settings.account_id = contacts.account_id)
WHERE EXISTS ( user_settings.account_id = contacts.account_id )

私の脳はちょうど私をシャットダウンしたように感じ、それを再起動するためのあらゆるバンプに感謝します。ありがとう:)

19
Kenny Cason

MySQLのドキュメントによると、クロステーブルの更新を行うには、(他のデータベースのように)結合を使用できませんが、代わりにwhere句を使用します。

http://dev.mysql.com/doc/refman/5.0/en/update.html

私はこのようなものがうまくいくと思います:

UPDATE User_Settings, Contacts
    SET User_Settings.Contact_ID = Contacts.ID
    WHERE User_Settings.Account_ID = Contacts.Account_ID
38
FlySwat
Update tabelName Set SanctionLoad=SanctionLoad Where ConnectionId=ConnectionID
go
update tabelName  Set meterreading=meterreading where connectionid=connectionid
go
update tabelName  set customername=setcustomername where customerid=customerid
0
Rajesh C