【问题标题】:Join when exact match other other wise join with default value完全匹配时加入,其他明智加入默认值
【发布时间】:2016-01-16 00:36:41
【问题描述】:
I have two table a and b

表一

   ID 
    a
    b
    c

表b

   ID           Value
   a             1   
   b             2
   default       0

所以我想在完全匹配时加入两个ID表,否则使用默认值 期望的结果

   ID           Value
   a             1   
   b             2
   c             0

【问题讨论】:

  • 您使用的是哪个 DBMS?用那个标记你的问题。

标签: sql oracle join


【解决方案1】:

为此目的使用LEFT OUTER JOIN,例如

select t1.ID, COALESCE(t2.Value, 0) as Value
from tablea t1 
left join tableb t2 on t1.ID = t2.ID;

【讨论】:

  • 但是默认值可以是我不知道的任何值,所以我不能使用coalesce
  • @JiaoWang,阅读 SQL 中的 JOINS。您不能使用该默认值。如果您进行内部联接,则将所有记录一起丢失,否则请执行外部联接,如答案。
【解决方案2】:

试试这个:

SELECT a.ID, b.Value
FROM a
INNER JOIN b
ON a.ID = b.ID
UNION ALL
SELECT a.ID, b.Value
FROM a
CROSS JOIN b
WHERE
    a.id <> b.id

这将为您提供所有匹配的 ID,然后 CROSS JOIN 查询的 UNION 应该为不匹配的 ID 提供默认值。

【讨论】:

    【解决方案3】:

    试试这个:

       SELECT t1.ID, 
              COALESCE(t2.Value, (SELECT Value FROM tableb t3 WHERE ID ='default')) AS Value
         FROM tablea t1 
    LEFT JOIN tableb t2 on t1.ID = t2.ID;
    

    【讨论】:

      猜你喜欢
      • 2016-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-21
      • 1970-01-01
      • 2014-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多