2017-12-18 2 views
0

Oracel-sqlでサブクエリを実行しようとしていますが、そのコンセプトを理解するのに苦労しています。oracleサブクエリネストの問題

下のコードでは、item_locというテーブルをstore_itemという別のテーブルにネストしようとしていますが、下のコードはコンパイルされません。

ORA-00933: SQL command not properly ended 00933. 00000 - "SQL command not properly ended" 

私はそれを修正するために何をすべきかわかりません。

SELECT sub.store 
FROM store_item sub 
    (SELECT item_id 
    FROM item_loc 
    WHERE item_id = 1134373 
    )sub 
    WHERE sub.store = 1 
    ; 

しかし、私は上記のコードを実行するが、それを変更すると、それは実行されます。しかし、私は次のコードを実行したように私は何も入れ子にする必要はありません。私はちょうど入れ子がどのように働くかを学ぼうとしています。

SELECT sub.* 
    FROM 
    (SELECT item_id 
    FROM item_loc 
    WHERE item_id = 1134373 
    )sub 
    ; 
+0

サンプルテーブルのデータと予想される結果を追加します。 (画像ではなく書式付きのテキストとして)BTW、おそらく 'JOIN'が必要でしょうか? – jarlh

+0

あなたはJDBCからこれらを呼び出していますか? – markg

+0

いいえOCDBからこれを呼び出す –

答えて

1

問題は:エイリアスsubを2回使用しました。多分このように:

SELECT sub.store 
FROM store_item sub2 
WHERE item_id in 
    (SELECT item_id 
    FROM item_loc 
    WHERE item_id = 1134373 
    ) 
    AND sub2.store = 1; 

OR

SELECT sub.store 
FROM store_item sub2 join 
    (SELECT item_id 
    FROM item_loc 
    WHERE item_id = 1134373 
    ) sub ON sub.item_id = sub2.item_id -- i assume join condition 
    WHERE sub2.store = 1; 

つまり、あなたは、そのような2つの異なる方法で2セットを比較すべきです。

0

お客様のステートメントには少なくとも2つのエラーがあります。まず、FROM節には、同じ名前の 'sub'を持つ2つの異なる参照が含まれています。次に、それらの間にコンマまたはジョイン句を入れる必要があります。正しいように、それは何かのようなものでしょう

SELECT sub1.store 
FROM store_item sub1 join 
    (SELECT item_id 
    FROM item_loc 
    WHERE item_id = 1134373 
    ) sub2 on <<<some condition>>> 
    WHERE sub1.store = 1 
    ; 

また、あなたがしたいことは明確ではありません。ネストしたテーブルを使用しますか?またはサブクエリを使用してクエリを実行しますか?または、他の何か?

他のものとは無関係に、非常に人工的な例では何かを学ぶのは難しいです。このテクニックを使用することができる本当の問題を見つけようとすると、はるかに簡単です。

0

サブクエリはテーブルに似ています。

テーブルは一連の行です。ビューは一連の行です。 select文の結果は一連の行です。それらのすべては同じ "権利と責任"を持っています。 selectステートメントでは、行のセットをデータソースとして使用できます。

あなたが書くことができ

select <columns list> from mytable 

mytableここでは、テーブルです。次は、テーブルとしてこのステートメントを処理し、次のように書くことができます。

select <something else> 
    -- you replace here a name of a table with the query (which is a subquery) 
    from (select <columns list> from mytable) 

あなたは、テーブル/ビュー/サブクエリにエイリアスを与えることができます。

select <columns list> from mytable t; 

select <something else> 
    from (select <columns list> from mytable) subquery 
ここ

tsubquery別名です。

次に、参加してください。さて、私が思うに、それはあなたのクエリで間違っているものを、明白である

select ... 
    from mytable t, 
     (...) subquery 
where t.column1 = subquery.column2 

または

select ... 
    from mytable t join (...) subquery 
     on t.column1 = subquery.column2 

:あなたは、このいずれか(表/ビュー/副問合せ)いずれかに参加することができます。