- PR -

INSERT INTO文について教えてください。

投稿者投稿内容
未記入
会議室デビュー日: 2006/02/21
投稿数: 16
投稿日時: 2006-02-24 17:45
oracle8iです。

table1 : データ件数を取得したい。この場合は2件。
TBL1 TBL2 TBL3
1 2 3
1 2 2

table2 : 1件のみのデータが入っています。項目1つ、データも1件。
NO1
100

今は以下のように組んでいます。
これだと、TEST_TBL1の件数が0件の場合に、WK_TABLEのNO1にNULLが挿入されてしまいます。TEST_TBL1の件数が0件の場合でも、NO1にはTEST_TBL2のNO1の値を取得したいのですが、いい方法はありますでしょうか?よろしくお願い致します。

INSERT INTO WK_TABLE ( NO1, NAME, DATA_COUNT, TIME_STAMP )
SELECT
MAX(B.NO1),'NAME', COUNT(*), SYSDATE
FROM table1 A, table2 B
;

selectの結果:TEST_TBL1に2件データがある場合(これでOK)
100,NAME,2,DATE

selectの結果:TEST_TBL1にデータが無い場合(現状)
NULL,NAME,0,DATE

selectの結果:TEST_TBL1にデータが無い場合(希望する結果)
100,NAME,0,DATE






温州蜜柑
ベテラン
会議室デビュー日: 2005/01/24
投稿数: 65
お住まい・勤務地: 東京都
投稿日時: 2006-02-24 17:59
INSERT INTO WK_TABLE ( NO1, NAME, DATA_COUNT, TIME_STAMP )
SELECT
NVL(MAX(B.NO1),0),'NAME', COUNT(*), SYSDATE
FROM table1 A, table2 B
;

でどうでしょう?

[ メッセージ編集済み 編集者: 温州蜜柑 編集日時 2006-02-24 18:02 ]

[ メッセージ編集済み 編集者: 温州蜜柑 編集日時 2006-02-24 18:03 ]
未記入
会議室デビュー日: 2006/02/21
投稿数: 16
投稿日時: 2006-02-24 18:06
この回答だと、
selectの結果:0,NAME,0,DATE
になってしまいますよね?

selectの結果:100,NAME,0,DATE
上記のような結果が出て欲しいのですが。table2の100は取得したいのです。

以上、よろしくお願い致します。


温州蜜柑
ベテラン
会議室デビュー日: 2005/01/24
投稿数: 65
お住まい・勤務地: 東京都
投稿日時: 2006-02-24 18:13
引用:

未記入さんの書き込み (2006-02-24 18:06) より:
この回答だと、
selectの結果:0,NAME,0,DATE
になってしまいますよね?

selectの結果:100,NAME,0,DATE
上記のような結果が出て欲しいのですが。table2の100は取得したいのです。

以上、よろしくお願い致します。





ちょっと誤解してました。申し訳ないです。
現在考え中...
温州蜜柑
ベテラン
会議室デビュー日: 2005/01/24
投稿数: 65
お住まい・勤務地: 東京都
投稿日時: 2006-02-24 18:19
これでどうでしょう?

コード:

SELECT
B.MAX_VALUE,
A.NAME,
A.CNT,
SYSDATE
FROM
(SELECT 1 AS DMY, 'NAME' AS NAME, COUNT(*) AS CNT FROM TABLE1) A,
(SELECT 1 AS DMY, MAX(NO1) AS MAX_VALUE FROM TABLE2) B
WHERE
A.DMY = B.DMY;



[ メッセージ編集済み 編集者: 温州蜜柑 編集日時 2006-02-24 18:20 ]
今川 美保(夏椰)
ぬし
会議室デビュー日: 2004/06/10
投稿数: 363
お住まい・勤務地: 神奈川県茅ヶ崎市
投稿日時: 2006-02-24 18:23
9iしかないので、9iで動作確認しましたが、
こんなSQLは動作しますか?

コード:

select
(select no1 from table2) NO1,
'NAME',
nvl(
(select count(*) from table1),0) DATA_COUNT,
SYSDATE
from dual;




#編集追加
INSERT INTOを頭につければINSERTとして動作するので省き
SELECT文のみ記載しました。
INSERT込みで動作確認をしています。

[ メッセージ編集済み 編集者: 夏椰|。σ)o 編集日時 2006-02-24 18:24 ]
うにくま
ベテラン
会議室デビュー日: 2005/11/05
投稿数: 82
投稿日時: 2006-02-24 18:27
Oracleは環境が無いので確認していませんが、

コード:
INSERT INTO WK_TABLE ( NO1, NAME, DATA_COUNT, TIME_STAMP )
SELECT
    NO1,
    'NAME',
    (
    SELECT
        COUNT(*)
    FROM    table1 
    ),
    SYSDATE
FROM  table2


で良いのではないでしょうか?
かずくん
会議室デビュー日: 2006/02/21
投稿数: 9
投稿日時: 2006-02-24 18:48
いろいろ回答が出てますが・・・

引用:
コード:

INSERT INTO WK_TABLE ( NO1, NAME, DATA_COUNT, TIME_STAMP )
SELECT
NO1,
'NAME',
(
SELECT
COUNT(*)
FROM table1
),
SYSDATE
FROM table2



は、8i の正確なバージョンが不明なのでなんとも言えませんが、
スカラー副問い合わせが可能ならいいでしょうね。

使えない場合は

コード:

select no1, 'NAME', c, SYSDATE
from (select no1 from table2)
, (select count(*) c from table1)



こんな感じでどうでしょうか?

[ メッセージ編集済み 編集者: かずくん 編集日時 2006-02-24 18:54 ]

スキルアップ/キャリアアップ(JOB@IT)