2017-05-04 14 views
0

私は2つのテーブルを持っています:table1とtable2の両方にIDの列が1つあります。 table1のIDがtable2にある場合は 'Y'を、table2にない場合は 'N'を表示する列をtable1に作成します。テーブル内のSQL CASE WHEN

現在、私が使用しています:

Select id, case when id in (table2) then 'Y' else 'N' end as in_table2 
from table1 

をただし、両方のテーブルは非常に大きいなので、クエリは永遠に取っています。これを行うより効率的な方法はありますか?

おかげ

答えて

1

使用exists

Select t1.id, 
     (case when exists (select 1 from table2 t2 where t2.id = t1.id) 
      then 'Y' else 'N' 
     end) as in_table2 
from table1 t1; 
0

これは非常に迅速かつ効率的に使用するよりもする必要がありますが存在します/サブクエリ:

SELECT t1.id , 
      CASE WHEN t2.id IS NULL 
       THEN 'N' 
       ELSE 'Y' 
      END AS in_table2 
    FROM table1 t1 
      LEFT JOIN TABLE2 t2 ON t1.id = t2.id; 

を左参加することによって、あなたは、table2の上のレコードの可視性を維持しますIDがnullの場合はtable1に存在するがtable2には存在しないことがわかるので、case文を使用してt2.idに基づいてYまたはNを表示することができます。