1

Oracle次のように、バッチ入力を使用してテーブルからレコードを取得できることがわかりました。

SELECT 
    * 
FROM
    invoices
WHERE
    (invoice_id, entity_id) IN 
                               (
                                   (1, 101), 
                                   (2, 102), 
                                   (3, 102)
                               )

ここで、列の 1 つの入力が重要でないクエリを実行する必要がありますが、バッチ クエリを実行することはできます。

例えば

SELECT 
    * 
FROM
    invoices
WHERE
    (invoice_id, entity_id, vendor_id) IN 
                               (
                                   (1, 101, 201), 
                                   (2, 102, 202), 
                                   -- no criteria on vendor_id for the tuple below
                                   (3, 102)   
                               )

このクエリを実行すると、クエリ エンジンは次のエラーを報告します。

ERROR at line 1:
ORA-00920: invalid relational operator

そもそもそのようなクエリを実行することは可能ですか? もしそうなら、どのように?

4

2 に答える 2

2

Oracle: 式リスト:

各セット内の式の数は、比較条件の演算子の前、またはメンバーシップ条件の IN キーワードの前の式の数と一致する必要があります。

これらの条件を分離できます。

SELECT 
    * 
FROM
    invoices
WHERE
    (invoice_id, entity_id, vendor_id) IN 
                               (
                                   (1, 101, 201), 
                                   (2, 102, 202)
                               )
    or 
    (invoice_id, entity_id) IN 
                               (
                                   -- no criteria on vendor_id for the tuple below
                                   (3, 102)   
                               )
于 2012-08-31T06:49:05.657 に答える
1
SELECT 
    * 
FROM
    invoices
WHERE
    (invoice_id, entity_id, vendor_id) IN 
                               (
                                   select 1, 101, 201 from dual
                                   union 
                                   select 2, 102, 202 from dual
                                   union
                                   select 3, 102, vendor_id from invoices
                               )
于 2012-08-31T06:54:02.607 に答える