基于具有值替换

时间:2018-06-15 11:31:33

标签: mysql sql replace substitution

我对查询很困难,我不知道该怎么做。

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

original_data_table replacement_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

my_view

id         name        value

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

3 个答案:

答案 0 :(得分:4)

您需要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;

答案 1 :(得分:1)

试试这个:

try ...catch

答案 2 :(得分:1)

尝试使用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 |