如何根据特定逻辑从table中加入并获取数据?
How to JOIN and get data from either table based on specific logics?
假设我有 2 个 table,如下所示:
Table 1:
Table 2:
我想将 2 个 table 连接在一起,这样输出 table 就会有一个“date”列,一个“hrs_billed_v1”来自 table1 的列,以及来自 table2 的“hrs_billed_v2”列。有时一个日期只存在于其中一个 table 中,有时一个日期同时存在于两个 table 中。如果 table1 和 table2 中都存在一个日期,那么我想从 table1 和 hrs_billed_v1 中分配 [= =37=]hrs_billed_v2 从 table2 到输出 table.
所以理想的结果应该是这样的:
我试过“FULL OUTPUT JOIN”,但它在输出 table 中为“日期”返回了一些空值。下面是我写的查询:
SELECT
DISTINCT CASE WHEN table1.date is null then table2.date WHEN table2.date is null then table1.date end as date,
CASE WHEN table1.hrs_billed_v1 is null then 0 else table1.hrs_billed_v1 END AS hrs_billed_v1,
CASE WHEN table2.hrs_billed_v2 is null then 0 else table2.hrs_billed_v2 END AS hrs_billed_v2
FROM table1
FULL OUTER JOIN table2 ON table1.common = table2.common
请注意,我用来连接 table1 和 table2 的“公共”列只是一个存在于两个 table 中的常量字符串。
如有任何建议,我们将不胜感激!
一个full join
确实是你想要的。我认为那将是:
select
common,
date,
coalesce(t1.hrs_billed_v1, 0) as hrs_billed_v1,
coalesce(t2.hrs_billed_v2, 0) as hrs_billed_v2
from table1 t1
full join table2 t2 using (common, date)
理由:
你没有显示 common
是什么;您的数据表明您想要匹配同一日期的行 - 所以我将两者都放在连接条件中;您可能需要调整
真的不需要distinct
coalesce()
比 case
表达式
短得多
using ()
方便表示两表匹配列同名时的连接条件
假设我有 2 个 table,如下所示:
Table 1:
Table 2:
我想将 2 个 table 连接在一起,这样输出 table 就会有一个“date”列,一个“hrs_billed_v1”来自 table1 的列,以及来自 table2 的“hrs_billed_v2”列。有时一个日期只存在于其中一个 table 中,有时一个日期同时存在于两个 table 中。如果 table1 和 table2 中都存在一个日期,那么我想从 table1 和 hrs_billed_v1 中分配 [= =37=]hrs_billed_v2 从 table2 到输出 table.
所以理想的结果应该是这样的:
我试过“FULL OUTPUT JOIN”,但它在输出 table 中为“日期”返回了一些空值。下面是我写的查询:
SELECT
DISTINCT CASE WHEN table1.date is null then table2.date WHEN table2.date is null then table1.date end as date,
CASE WHEN table1.hrs_billed_v1 is null then 0 else table1.hrs_billed_v1 END AS hrs_billed_v1,
CASE WHEN table2.hrs_billed_v2 is null then 0 else table2.hrs_billed_v2 END AS hrs_billed_v2
FROM table1
FULL OUTER JOIN table2 ON table1.common = table2.common
请注意,我用来连接 table1 和 table2 的“公共”列只是一个存在于两个 table 中的常量字符串。
如有任何建议,我们将不胜感激!
一个full join
确实是你想要的。我认为那将是:
select
common,
date,
coalesce(t1.hrs_billed_v1, 0) as hrs_billed_v1,
coalesce(t2.hrs_billed_v2, 0) as hrs_billed_v2
from table1 t1
full join table2 t2 using (common, date)
理由:
你没有显示
common
是什么;您的数据表明您想要匹配同一日期的行 - 所以我将两者都放在连接条件中;您可能需要调整真的不需要
distinct
短得多coalesce()
比case
表达式using ()
方便表示两表匹配列同名时的连接条件