如何根据特定逻辑从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 () 方便表示两表匹配列同名时的连接条件