SQL CASE WHEN在表中

时间:2017-05-04 17:35:52

标签: sql

我有两个表:table1和table2都有一列ID。我想在table1中创建一个列,如果table1中的ID在table2中则显示'Y',如果不在则表示'N'。

目前,我正在使用:

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

但是,由于两个表都非常大,因此查询将永远存在。有更有效的方法吗?

由于

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

这应该比使用exists /子查询更快更有效:

    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显示Y或N.标识。