【问题标题】:How to fill (join with other table) null values if any from another table?如果有来自另一个表的空值,如何填充(与其他表连接)?
【发布时间】:2019-08-25 21:11:24
【问题描述】:

我有两个相似的表,它们有相同的列,但不同的数据,都匹配不同的标准。我想将表 A 连接到表 B,其中一些值为空。

我试图查找类似的问题,但据我所知,它们并没有描述我的情况。

例如: 表A看起来像

| id | name | age | gender |
  1    Jhon   2      Male
  2    Will   null   null

表 B 的样子

| id | name | age | gender |
  1    Jhon   null   null
  2    Will   3      Male

我想做的是什么

| id | name | age | gender |
  1    Jhon   2      Male
  2    Will   3      Male

我试图离开加入它,但结果并不如预期。我的想法也许我需要内部加入它,然后离开加入也许,但它有点模糊。

我有点新加入,所以每一个想法都受到赞赏。

提前致谢。

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    你可以尝试在子查询中使用UNION ALL来做MAX

    SELECT id ,name,MAX(age) age ,MAX(gender) gender
    FROM (
        SELECT id ,name , age , gender 
        FROM A
        UNION ALL
        SELECT id ,name , age , gender 
        TABLE B
    ) t1
    GROUP BY id ,name
    

    如果您的 AB 表架构相同,我建议您只使用一个表并使用标志来拆分这两部分。

    【讨论】:

    • 谢谢,我发现你和@gordon-linoff 的回答都很有用,但我发现他的用例更适合我。但无论如何,谢谢。 :)
    【解决方案2】:

    你试过了吗?

    select id, name,
           coalesce(a.age, b.age) as age,
           coalesce(a.gender, b.gender) as gender
    from a join
         b
         using (id, name);
    

    问题不在于连接类型,而在于如何组合select 中两个表中的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-29
      • 2023-03-18
      • 1970-01-01
      • 2018-09-15
      • 1970-01-01
      • 2022-08-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多