基于两个表创建一个视图,并使用值替换

tgabmvqs  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(354)

我很难回答一个问题,我不知道该怎么做。
我想创建一个基于表原始数据表的视图myu view,每当指定id时,每个值都被表替换数据表中的非空值替换。
原始数据表和替换数据表的结构相同,但值不同。
我试图在我的查询中使用join,但我不确定这是否合适。

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

原始数据表

id         name        value

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

替换数据表

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
x9ybnkn6

x9ybnkn61#

你需要 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;
xienkqul

xienkqul2#

试试这个:

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
kuuvgm7e

kuuvgm7e3#

试试看用吧 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演示链接
idnamename
1David50
2Rick20
3Sarah30
4Emma60

相关问题