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

締切り済みの質問

見たことのないINSERT文

お世話になります。
他人の書いたSQLを解析して以下のようなコードを見つけました。

CREATE TABLE OYA (
IDNUMBERNOT NULL,
NAMEVARCHAR2(10)
)
/

CREATE TABLE KO (
IDNUMBERNOT NULL,
OYA_IDNUMBERNOT NULL,
NAMEVARCHAR2(10)
)
/

INSERT INTO
(
SELECT ID
,OYA_ID
,NAME
FROMKO
WHEREEXISTS (
SELECT ID
FROM OYA
WHERE NAME LIKE '%1'
)
)
VALUES
(
1
,1
,'KODOMO-1'
);


INSERT文でテーブル名を指定するかわりにSELECT文を指定しています。
SELECT INSERT文は知っていますが、このような表記は初めてです。
(文法エラーにならないのに驚きました)
おそらく意図するところは、ある条件に一致したOYAが存在する場合に、KOをインサートするのだと思いました。
実際は、OYAがなくてもINSERTは実行されてしまいますが。。。
このような表記のINSERT文の説明が書いてあるサイトをご存知の方がいらっしゃいましたら、よろしくお願いします。

投稿日時 - 2007-04-20 16:15:41

QNo.2936064

すぐに回答ほしいです

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

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

回答(5)

ANo.5

>into の後に実表名 KO を書いてください
すいません、ケアレスミスです。

ANo.4の件、納得できました。
jjon-comさん、ありがとうございました。

投稿日時 - 2007-04-21 08:29:37

ANo.4

#3の後半の問いは,into の後に実表名 KO を書いてください。書いてあるならその通り,同義です。

念のため確認しておきます。
--------------------------------
create view TEMP_KO as
 SELECT ID, OYA_ID, NAME
 FROM KO
 WHERE EXISTS (SELECT ID FROM OYA WHERE NAME LIKE '%1');

insert into TEMP_KO(ID, OYA_ID, NAME)
values (1, 1, 'KODOMO-1');
--------------------------------
という2つの文を,TEMP_KOという一時表を作らないで一文にまとめたのがご質問のあったインラインビューの書式です。

キーワード with-check-option でgoogleして最上位にヒットする,参考URLもご参照ください。WHERE dept_id = 200 で抽出されたビューに対して,UPDATE ビュー SET dept_id = 400 が成功しています。CREATE VIEWで指定されたWHERE句はビューに対するDML命令では評価されない,DML実行時にその条件を検査したいのならWITH CHECK OPTIONを指定します。ということで,#3の前半の問いはその通り,登録されます。

参考URL:http://www.ianywhere.com/developer/product_manuals/sqlanywhere/0902/ja/html/dbugja9/00000062.htm

投稿日時 - 2007-04-20 23:21:30

ANo.3

私も、この書き方は知らなかったので、
回答ではなく便乗質問させてもらいますが、
質問でのSQLには
WITH CHECK OPTIONが指定されていないので、
OYA表のNAMEに'%1'に該当するデータが無くても、
KO表に無条件で
(1,1,'KODOMO-1');
データが登録されるわけですね?

結局、質問のSQLは
insert into (ID,OYA_ID,NAME) values (1,1,'KODOMO-1');
と同義なのですね?

投稿日時 - 2007-04-20 20:05:32

ANo.2

インライン・ビューと呼ばれる書式です。ご質問の例では,ビューを経由してその元表である実表にデータ挿入しているわけです。
OYA表のNAME列の値が'……1'というパターンにマッチするデータが存在するなら,というWHERE句が無視される理由も下記URLに書いてあります。
http://www.jjon.com/oracle/OracleSilver2002/12/index.html
http://www.istudy.ne.jp/ilnews/vol306/sql.asp

投稿日時 - 2007-04-20 16:44:33

お礼

ありがとうございます。大変勉強になりました。
インラインビューという書式なのですね。
名前がわからなかったため検索するキーワードも思いつきませんでした。

投稿日時 - 2007-04-23 09:43:19

ANo.1

ご参考まで。

参考URL:http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/sq_kj09.htm

投稿日時 - 2007-04-20 16:28:07

あなたにオススメの質問