【问题标题】:Create a view based on two tables with value substitution基于具有值替换的两个表创建视图
【发布时间】:2018-06-15 11:31:33
【问题描述】:

我遇到了一个查询,但我不知道该怎么做。

我想根据表 original_data_table 创建一个视图 my_view,其中每个值都替换为指定 id 时,replacement_data_table 表中的非空值。

original_data_tablereplacement_data_table 具有相同的结构,但具有不同的值。

我尝试在查询中使用 JOIN,但我不确定这是否可行。

SELECT * FROM original_data_table AS o
LEFT JOIN replacement_data_table AS r
ON o.id = r.id

original_data_table

id         name        value

1          David       10
2          John        20
3          Sarah       30
4          Amy         40

replacement_data_table

id         name        value

1          NULL        50
2          Rick        NULL
4          Emma        60

我的视图

id         name        value

1          David       50
2          Rick        20
3          Sarah       30
4          Emma        60

【问题讨论】:

    标签: mysql sql replace substitution


    【解决方案1】:

    您需要COALESCE() 从正确的表中获取正确的值:

    SELECT o.id,
           COALESCE(r.name, o.name) as name,
           COALESCE(r.value, o.value) as value
    FROM original_data_table o LEFT JOIN
         replacement_data_table r
         ON o.id = r.id;
    

    【讨论】:

      【解决方案2】:

      试试这个:

      SELECT o.id as id, IFNULL(r.name, o.name) as new_name, IFNULL(r.value, o.value) as new_value
      FROM original_data_table AS o
      LEFT JOIN replacement_data_table AS r
      ON o.id = r.id 
      

      【讨论】:

        【解决方案3】:

        尝试使用case when

        SELECT 
          o.`id`,case when o.`name` <> r.`name` and r.`name` is not null then
              r.`name`
            else o.`name`
          end as name
          ,case when o.`value` <> r.`value` and r.`value` is not null then
              r.`value`
            else o.`value`
          end as value
        FROM original_data_table AS o
        LEFT JOIN replacement_data_table AS r
          ON o.id = r.id 
        order by o.id
        

        SQL Fiddle Demo Link

        | id |  name | name |
        |----|-------|------|
        |  1 | David |   50 |
        |  2 |  Rick |   20 |
        |  3 | Sarah |   30 |
        |  4 |  Emma |   60 |
        

        【讨论】:

          猜你喜欢
          • 2022-01-23
          • 2012-01-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多