0

私は次のスクリプトを書きました

SELECT vil.account_id , 
       vil.imp_id, 
       vil.owner ,
       vil.start_date,
       CASE  
         WHEN ac.status = 4  
         THEN status_date  
         ELSE NULL  
       END AS Live_date,
       cs.country_code  
  FROM ACCOUNT ac  
  INNER JOIN vu_imp_list vil  
     ON vil.account_id = ac.account_id  
  INNER JOIN entity e  
     ON ac.entity_id = e.entity_id  
  INNER JOIN country_specifics cs  
     ON e.country_id = cs.country_id  
  WHERE (vil.account_id, vil.start_date) =   
        (SELECT vils.account_id, MIN(vils.start_date)   
           FROM vu_imp_list vils  
          WHERE vil.account_id IN  ('825808009','987323136')  
          group by vils.account_id);  

しかし、私はエラーを受け取り続けます

SQL Error: ORA-01427: single-row subquery returns more than one row  
01427. 00000 -  "single-row subquery returns more than one row"  

rownum = 1サブクエリの句に追加しようとしましwhereたが、クエリが永久に実行されているようです。サブクエリを個別にテストしたところ、それぞれに対して 1 つの行が返されますaccount_id。ここでの同様の問題のほとんどは、単なるクエリではなく問題に関連しinsertています。update

4

2 に答える 2

1

サブクエリが正確に 1 行 (または 0 行) を返すことを確認する必要があります。私はあなたがこれを望んでいると思います:

  WHERE vil.start_date =   
        (SELECT MIN(vils.start_date)   
           FROM vu_imp_list vils  
          WHERE vils.account_id IN ('825808009','987323136')  
        ); 

または、サブクエリが 2 つ以上の行を返し、それらのいずれかとIN比較したい場合に使用します。start_date

  WHERE vil.start_date IN   
        (SELECT MIN(vils.start_date)   
           FROM vu_imp_list vils  
          WHERE vils.account_id IN ('825808009','987323136')
          GROUP BY vils.account_id 
        ); 

または、相関サブクエリが必要な場合は、おそらく次のようになります。

  WHERE vil.account_id IN ('825808009','987323136')
    AND vil.start_date =   
        (SELECT MIN(vils.start_date)   
           FROM vu_imp_list vils  
          WHERE vils.account_id = vil.account_id 
        ); 
于 2013-10-23T06:30:43.877 に答える
0

テーブルにとvu_imp_listの両方が存在する場合、この内部クエリは次のようになります。825808009987323136account_id

(SELECT vils.account_id, MIN(vils.start_date)   
 FROM vu_imp_list vils  
 WHERE vil.account_id IN ('825808009','987323136')  
 group by vils.ob10_account_id)

2行、それぞれ2列を生成します。

問題は、次のように複数列の等価性チェックを実行できないことですWHERE

WHERE (vil.account_id, vil.start_date) =   
    (SELECT vils.account_id, MIN(vils.start_date) ... )
于 2013-10-23T06:29:23.333 に答える