お世話になります。
更新のSQL文を考えているのですが、なかなかうまく動きません。
どなたか教えていただけないでしょうか?
やりたいことは、"KSK011"と"KSJ01"で"HINB"という項目で
マッチングしていたら、KSJ01の"ZAIK"をKSK011の"ZZAI"
にセットしたいと考えています。
UPDATE KSK011 SET KSK011.ZZAI = KSJ01.ZAIK
WHERE KSK011.HINB IN
(SELECT KSK011.HINB FROM(KSK011) INNER JOIN KSJ01 ON KSK011.
HINB = KSJ01.HINB)
動作させると、FROMのカッコが不適切とエラーがでます。カッコを取ると”マルチパート識別子 ??KSJ01.ZAIK?? をバインドできませんでした。”となります。どこがまずいのでしょうか?
No.2ベストアンサー
- 回答日時:
下記の書き方だと、UPDATE句が参照可能なのはKSK011のみです。
WHERE句の IN内にサブクエリで書かれても「KSJ01」はメインで参照はできません。あくまでWHERE条件として使われます。
> UPDATE KSK011
> SET KSK011.ZZAI = KSJ01.ZAIK
>WHERE KSK011.HINB IN
>(SELECT KSK011.HINB FROM(KSK011)
> INNER JOIN KSJ01 ON KSK011.HINB = KSJ01.HINB);
上記をわかりやすくSELECT句で表現すると以下となります。
select xxx.colx1,zzz.colz1
from xxx
inner join zzz on zzz.colz1 = xxx.colx1
where xxx.colx1 in (select coly1 from yyy)
メインのSELECT句が参照できるのはFROM句で指定されたxxxと
ジョインしているzzzだけです。
yyyはin句の評価でしか使われません。
FROM句に入れていないのでSELECT候補ではありません。
FROM内にないものは参照できないと考えてください。
UPDATE文を考える時もSELECT文を考えてから置き換えたほうがわかりやすいです。SELECTできなければUPDATEもできません。
詳しい説明ありがとうございます。
WHERE句なので、評価としてしか使えないんですね。
納得しました。
丁寧な説明ありがとうございます。
No.1
- 回答日時:
サブクエリの中でJOINしたところで、更新をするメインクエリがKSJ01を参照できないわけですから、そういうエラーになります。
SQL Serverの場合、正しくは以下の通りです。
UPDATE KSK011
SET KSK011.ZZAI = KSJ01.ZAIK
FROM KSK011
INNER JOIN KSJ01 ON KSK011.HINB = KSJ01.HINB
この回答への補足
jamshid6さん素早いアドバイスありがとうございます。
メインクエリでKSJ01を参照できないと言ってもらっていますが、
私の書いたほうの1行目でしょうか?
初歩的なことですが、KSJ01と書いてなぜ参照できないんでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
餃子を食べるとき、何をつけますか?
みんな大好き餃子。 ふと素朴な疑問ですが、餃子には何をつけて食べますか? 王道は醤油とお酢でしょうか。
-
人生最悪の忘れ物
今までの人生での「最悪の忘れ物」を教えてください。 私の「最悪の忘れ物」は「財布」です。
-
CDの保有枚数を教えてください
ひとむかし前はCDを買ったり借りたりが主流でしたが、サブスクで簡単に音楽が聴ける今、CDを手に取ることも減ってきたかと思います。皆さんは2024年現在、何枚くらいCDをお持ちですか?
-
許せない心理テスト
私は「あなたの目の前にケーキがあります。ろうそくは何本刺さっていますか」と言われ「12本」と答えたら「ろうそくの数はあなたが好きな人の数です」と言われ浮気者扱いされたことをいまだに根に持っています。
-
高校三年生の合唱祭で何を歌いましたか?
大人になると大人数で合唱する機会ってないですよね。 思い出すと、高校三年生の合唱祭が最後でした。 そこで、みんなの思い出の合唱曲を知りたい!
-
SQLのエラー(~付近に不適切な構文があります)
SQL Server
-
SQLserver算術オーバーフローエラーについて
SQL Server
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
#1062 - '0' は索引 'PRIMARY' ...
-
DocuWorksでの印刷
-
ADOでの接続
-
ORACLE PL/SQLの...
-
Access 実行時エラー'3075' 対...
-
AccessのMDBのオープンエラーに...
-
Access2010実行時エラー-21473525
-
AccessVBA 実行時エラー'2766'...
-
EXP時のSELECT句
-
AccessにExcelデータの自動取込...
-
列名に変数を使うことはできな...
-
アクセスでエラー このフィー...
-
空白はダメというエラーの表示...
-
『ORA-00936: 式がありません。...
-
エラーについて
-
ODBCデータソースが削除できま...
-
オラクルでisnumeric?
-
UPDATEを使ったSQL文にて
-
オラクル(PL/SQL)のエラー
-
BULK INSERTのエラー取得は可能...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
#1062 - '0' は索引 'PRIMARY' ...
-
アクセスでエラー このフィー...
-
列名に変数を使うことはできな...
-
SQLserver2005 nvarchar を flo...
-
AccessVBA 実行時エラー'2766'...
-
(素人の質問) SQL Server エ...
-
オラクル(PL/SQL)のエラー
-
DocuWorksでの印刷
-
SQL*Loaderで「オブジェクトが...
-
Transact-SQLのBULK INSERTでエ...
-
UPDATEを使ったSQL文にて
-
空白はダメというエラーの表示...
-
Access2010実行時エラー-21473525
-
実行時エラー459 withステート...
-
SQLCODE=-420とはどういうエラ...
-
Access 実行時エラー'3075' 対...
-
エラーについて
-
『ORA-00936: 式がありません。...
-
BULK INSERTのエラー取得は可能...
-
オラクルでisnumeric?
おすすめ情報