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
假设我有两个表,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