0

2 つのカーソルを比較し、一意の値を再実行する必要がある場合、どうすればよいですか

例 CURSOR c_stock_option IS select empid, name, ssn, isenrolled from employee where isenrolled=1

CURSOR c_espp_option IS isenrolled=2 の従業員から empid、name、ssn、isenrolled を選択

ここで、カーソル 1 の選択にある 2 番目のカーソルのすべての rec を拒否したいのですが、どうすればよいですか

4

1 に答える 1

0

うーん...定義により、isenrolled=2 のすべての行は、isenrolled=1 の行と重複しません。しかし、ある結果セットから別の結果セットにある行を除外する方法について、より一般的な質問をしていると思います。

この場合、いくつかの異なるアプローチを取ることができます。

1)

CURSOR c_stock_option IS 
   Select empid, name, ssn, isenrolled from employee where isenrolled=1
   MINUS
   Select empid, name, ssn, isenrolled from employee where isenrolled=2

2)

CURSOR c_stock_option IS 
   Select empid, name, ssn, isenrolled from employee 
   where isenrolled=1
     and empid not in (
      Select empid, name, ssn, isenrolled from employee where isenrolled=2)

3)

CURSOR c_stock_option IS 
   Select empid, name, ssn, isenrolled from employee e
   where isenrolled=1
     and not exists(
      Select 1 from employee where e.empid = employee.empid and isenrolled=2)

どちらを選択するかは、状況、データ モデル、インデックス作成などによって異なります。

于 2011-04-14T19:41:49.657 に答える