- 締切済み
複数テーブルからデータを取り、updateする
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1211685 にも同じような質問があったのですが、同様の処理でうまくupdateされません。分かる方がいらっしゃいましたら教えてください。 今、テーブルが2つ(table1、table2)があり、それぞれ2つのカラム(column1、column2)を持っています。ここで、それぞれのカラム2が等しく、カラム1が指定した値のレコードのみ値をupdateしたいです。 update table1 set column1 = 'AAA' from table1,table2 where table1.column2 = table2.column2 and table1.column1 = 'BBB' and table2.column1 = 'CCC' としたところ、「from table1,table2 where 」の辺りに間違いがあると表示されます。 上の例とどう違うのか分かりません。 よろしくお願いします。m(__)m
- みんなの回答 (7)
- 専門家の回答
みんなの回答
- snow765
- ベストアンサー率26% (8/30)
fromにtable1は不要なのではないでしょうか? update table1 set column1 = 'AAA' from table2 where table1.column2 = table2.column2 and table1.column1 = 'BBB' and table2.column1 = 'CCC' こんな感じでいけると思いますよ
- tasokarewa
- ベストアンサー率76% (13/17)
通りかかりました。 1.SELECTはできるのでしょうか?UPDATE文をSELECT文にかえて 実行してみて下さい。 2.SELECTができてUPDATEができないのであれば、 SQLサーバーの4.1(私は存在を知らないですが)が SQL文の仕様にあっていないのかも知れませんので、 別の方法で模索されてはいかがでしょうか? たとえば、EXISTS句を使用されるとか。 例: UPDATE table1 SET column1 = 'AAA' FROM table1 WHERE table1.column1 = 'BBB' AND EXISTS ( SELECT * FROM table2 WHERE table1.column2 = table2.column2 AND table2.column1 = 'CCC' )
No4 さん同様の疑問を抱いています。 update table1 set column1 = 'AAA' from table1, table2 where table1.column2 = table2.column2 and table1.column1 Like 'BBB' and table2.column1 Like 'CCC' 表[TABLE1] を更新しました。 と、Like 演算子を使わないとエラーになるケースかも知れません。 先のテストは、varchar を前提にしたものです。
- ken__t
- ベストアンサー率41% (53/129)
はじめまして。 column1、column2それぞれの属性を教えていただけますか。 無粋な確認ですが、column1は英数字属性(char等)になっていますでしょうか。
- chaozux
- ベストアンサー率40% (25/61)
#1です。 全角スペースなかったんですね^^; それでは、ちょっと書き直してみましょうか。 table1 → a table2 → b と置き換えしてみます。(こちらの方が私は分かりやすいです^^;) update a set a.column1 = 'AAA' from table1 as a, table2 as b where a.column2 = b.column2 and a.column1 = 'BBB' and b.column1 = 'CCC' もしくは、私の場合、よくjoinを使うのですが、下記のように書いてみてください。 update a set a.column1 = 'AAA' from table1 as a join table2 as b on (a.column2 = b.column2) where a.column1 = 'BBB' and b.column1 = 'CCC' この書き方で出来ないでしょうか?
No1さんの回答通りです。 table1とtable2を作成しテストしたところ首尾よく更新されましたよ。 update table1 set column1 = 'AAA' from table1,table2 where table1.column2 = table2.column2 and table1.column1 = 'BBB' and table2.column1 = 'CCC' 表[TABLE1] を更新しました。 [TABLE1] ID column1 column2 1 111111 2 AAA 111 <--- BBB が AAA に更新されました。 3 BBB 222 [TABLE2] ID column1 column2 1 111111 2 CCC 111 3 CCC 333
- chaozux
- ベストアンサー率40% (25/61)
はじめまして。 ざっと見たところ間違いはなさそうですね^^; 全角スペースが途中に入っていたりすると構文エラーになるので、まずはその辺を疑ってみてはどうでしょう?
補足
全角スペースが無いかチェックしました。 (残念ながら?)ありませんでした。。 テーブルを2つ並べる記載方法はこれで正しいですよね? column1を`column1`としてみたり色々試しましたが解答には至っていません。 何か気づくことがございましたらアドバイスお願いします。
補足
無理です。(涙 どちらの場合も「from」の所でつまずきます。 SQLサーバーはバージョンが4.1なのですが、 このバージョンは対応していないのでしょうかねえ。。