お世話になります。
更新の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で質問しましょう!
似たような質問が見つかりました
- Oracle SQL update方法 2 2022/06/22 14:07
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- Access(アクセス) アクセス 削除するレコードを含んだテーブルを指定してくださいのエラー対処方法 1 2022/11/24 15:01
- MySQL PhpMyAdminで作成して実行せよ。 東京23区を、皇居を中心とした4つのエリア(南東, 南西, 1 2023/06/11 11:58
- MySQL SQLです。下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 「昨年の各月の総降 1 2023/07/01 00:32
- MySQL SQLです。こんな感じですか?あってますか? うまくいきません教えてくださいお願いします 1 2023/07/08 15:27
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- PostgreSQL SQLで検索結果の記事を表示したい 1 2022/04/28 21:03
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
SQLのエラー(~付近に不適切な構文があります)
SQL Server
-
他のデータベースとのテーブル結合
SQL Server
-
MS SQLServer のSQLで文字列の前にN:
その他(データベース)
-
-
4
exeファイルの中身を見ることは可能ですか?
フリーソフト
-
5
特定条件でWHERE句の条件を変更したい
SQL Server
-
6
SQLについて教えて下さい with(nolock)の意味は何でしょうか?
SQL Server
-
7
sqlserverで集計結果をUPDATEしたいです
SQL Server
-
8
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
#1062 - '0' は索引 'PRIMARY' ...
-
Access2010実行時エラー-21473525
-
列名に変数を使うことはできな...
-
PL/SQL ORA-06502エラーに関し...
-
SQLserver2005 nvarchar を flo...
-
オラクル(PL/SQL)のエラー
-
DLLが正しく呼び出せません (ToT)
-
AccessVBA 実行時エラー'2766'...
-
(素人の質問) SQL Server エ...
-
アクセスでエラー このフィー...
-
DBCC CHECKDBのエラーについて
-
実行時エラー459 withステート...
-
空白はダメというエラーの表示...
-
SQL エラー コードの一覧 につ...
-
Access2007のVBAにてSendObject...
-
ORACLE PL/SQLの...
-
「1004:アプリケーション定義...
-
FETCHエラー(オラクル)
-
「巡回冗長エラー」とは何です...
-
Transact-SQLのBULK INSERTでエ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
#1062 - '0' は索引 'PRIMARY' ...
-
列名に変数を使うことはできな...
-
「1004:アプリケーション定義...
-
空白はダメというエラーの表示...
-
アクセスでエラー このフィー...
-
SQLserver2005 nvarchar を flo...
-
SQL文長の制限
-
AccessVBA 実行時エラー'2766'...
-
BULK INSERTのエラー取得は可能...
-
オラクル(PL/SQL)のエラー
-
DocuWorksでの印刷
-
オラクルでisnumeric?
-
実行時エラー459 withステート...
-
Access2010実行時エラー-21473525
-
Transact-SQLのBULK INSERTでエ...
-
SQLCODE=-420とはどういうエラ...
-
PL/SQL ORA-06502エラーに関し...
-
MySQLでcreateが使えない MySQL...
-
『ORA-00936: 式がありません。...
-
(素人の質問) SQL Server エ...
おすすめ情報