coalesce join where seeking to return id 如果它存在于 table

coalesce join where seeking to return id if it exists in either table

假设我有两个表,t1 和 t2,它们都有一个字段 'id'。

我想 运行 查询 returns:

id|in t1|in t2

其中 t1 和 t2 中的字段是布尔值。

所以行将是不同的 ID,然后是两个字段,表示该 ID 是否存在于 t1、t2 或两者中。

我以前遇到过在连接上使用 coalesce 的语法,我认为现在是采用该方法的合适时机,但我不记得具体如何构造它?

您可以使用 full join。如果您的数据库支持布尔值:

select id,
       ( t1.id is not null ) as in_t1,
       ( t2.id is not null ) as in_t2
from t1 full join
     t2
     using (id);

否则,你case:

select id,
       (case when t1.id is not null then 1 else 0 end) as in_t1,
       (case when t2.id is not null then 1 else 0 end) as in_t2
from t1 full join
     t2
     using (id);

您可以使用 union all 和聚合做类似的事情:

select id, max(in_t1) as in_t1, max(in_t2) as in_t2
from ((select id, 1 as in_t1, 0 as in_t2 from t1
      ) union all
      (select id, 0, 1
      )
     ) t
group by id;

您可以使用完整联接:

select
  coalesce(t1.id, t2.id) id,
  case when t1.id is not null then 'true' else 'false' end in_t1,
  case when t2.id is not null then 'true' else 'false' end in_t2
from t1 full outer join t2
on t2.id = t1.id