dポイントプレゼントキャンペーン実施中!

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

A 回答 (7件)

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



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

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

通りかかりました。


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'
)
    • good
    • 0

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

はじめまして。



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

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

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

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

この回答への補足

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

補足日時:2006/10/21 17:22
    • good
    • 0

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
    • good
    • 0

はじめまして。


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

この回答への補足

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

補足日時:2006/10/21 16:20
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!