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

解決済みの質問

SQL詳しい方、助けてください。

こんにちは。

UPDATE テーブルA
SET フィールドA1 = '1' WHERE
フィールドA2 =(SELECT フィールドB1 FROM テーブルB
WHERE フィールドB2 = 'C0' OR フィールドB2 = 'C2' AND フィールドB3='')
AND フィールドA3 = '' AND フィールドA4 <> ''

というSQLを作成して、動作していたので安心していたら、
テーブルBのレコード数は1件のみだと思っていたら、複数存在する場合があるとのことで、
テーブルBのレコードを追加してみたところ、、

【サブクエリは複数の値を返しました。サブクエリが = 、!= 、<、<= 、>、>= のあとに続く場合や、
サブクエリが 1 つの式として使われる場合に複数の値は許可されません。】

というエラーで終了するようになってしまいました。

そこで、

UPDATE テーブルA AS A INNER JOIN
テーブルB AS B
ON A.フィールドA2 = B.フィールドB1
SET A.フィールドA1 ='1'
WHERE B.フィールドB2 = 'C0' OR B.フィールドB2 = 'C2' AND B.フィールドB3=''
AND A.フィールドA3='' AND A.フィールドA4 <> ''

としてみました。
なんだか混乱してきて、結合条件があっているかが
自分でもよくわかんなくなっていますが。
しかも、
上記のSQLをSQL SERVER 2000のクエリアナライザで
実行すると、
【キーワード 'inner' 付近に正しくない構文があります。】
というエラーが・・・。
INNER 以下はいろいろおかしいんだろうな・・・と
思っていたのですが、まさか、そんなしょっぱなで引っかかるとは思いませんでした。
いろいろ、記述方法を変更してみたり、考えたんり
したんですけど、情けないことにさっぱり解りません。

どなたかお力をお貸しください。
お願いします。

投稿日時 - 2002-07-11 13:19:26

QNo.311620

困ってます

質問者が選んだベストアンサー

お疲れ様です。

具体的にどのようなことを行いたいのかはわかりませんが、クエリを見た感じで・・・

SQL Server であれば「IN」で対応できると思います。
尚、確認はしておりません。m(_ _)m

直すとこんな感じで・・・


UPDATE テーブルA
SET  フィールドA1 = '1'
WHERE フィールドA2 In (
             SELECT フィールドB1
             FROM  テーブルB
             WHERE (フィールドB2 = 'C0' OR フィールドB2 = 'C2')
             AND  フィールドB3 = ''
            )
AND  フィールドA3 = ''
AND  フィールドA4 <> ''


間違っていたらごめんなさい。

投稿日時 - 2002-07-11 13:43:23

お礼

早速の返答ありがとうございます。
あってました、動作しました、
最高です。
でも、SQLサーバーのブックスオンラインで
調べたらUPDATE分のときのINNER JOINの
記述方法がまったく違っていたのに気が付き、
自力解決した直後だったりします。
これは解らんと思い、いきなりネットで
検索掛けたのがまずかったようです(苦笑)。
ネットで散々調べて、わかんなくて、こちらで
質問させて頂いたら、ブックスオンラインで
あっさりと問題が解決しようとは・・・。

しかし、こちらのjosyo_mの記述方法も僕は
おこなったこと無いので、勉強になります。
どちらがパフォーマンスが良いか
確認してから、自力で見つけた方か、josyo_mさん
にご教授していただいた方かを選択したいと
思います。

助かりました、ありがとうございました。

投稿日時 - 2002-07-11 14:23:58

ANo.1

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

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

回答(1)

あなたにオススメの質問