こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

複数テーブルからデータを取り、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

投稿日時 - 2006-10-21 15:27:27

QNo.2487550

困ってます

このQ&Aは役に立ちましたか?

11人が「このQ&Aが役に立った」と投票しています

回答(7)

ANo.7

fromにtable1は不要なのではないでしょうか?

update table1
set column1 = 'AAA' from table2
where table1.column2 = table2.column2
and table1.column1 = 'BBB'
and table2.column1 = 'CCC'

こんな感じでいけると思いますよ

投稿日時 - 2006-11-29 13:16:21

ANo.6

通りかかりました。
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'
)

投稿日時 - 2006-11-19 14:32:39

ANo.5

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 を前提にしたものです。

投稿日時 - 2006-10-23 10:07:51

ANo.4

はじめまして。

column1、column2それぞれの属性を教えていただけますか。

無粋な確認ですが、column1は英数字属性(char等)になっていますでしょうか。

投稿日時 - 2006-10-23 09:47:47

ANo.3

#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'

この書き方で出来ないでしょうか?

投稿日時 - 2006-10-21 16:39:28

補足

無理です。(涙
どちらの場合も「from」の所でつまずきます。
SQLサーバーはバージョンが4.1なのですが、
このバージョンは対応していないのでしょうかねえ。。

投稿日時 - 2006-10-21 17:22:41

ANo.2

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

投稿日時 - 2006-10-21 16:35:56

ANo.1

はじめまして。
ざっと見たところ間違いはなさそうですね^^;
全角スペースが途中に入っていたりすると構文エラーになるので、まずはその辺を疑ってみてはどうでしょう?

投稿日時 - 2006-10-21 16:09:02

補足

全角スペースが無いかチェックしました。
(残念ながら?)ありませんでした。。
テーブルを2つ並べる記載方法はこれで正しいですよね?
column1を`column1`としてみたり色々試しましたが解答には至っていません。
何か気づくことがございましたらアドバイスお願いします。

投稿日時 - 2006-10-21 16:20:01

あなたにオススメの質問