基于具有值替换的两个表创建视图
Create a view based on two tables with value substitution
我遇到了一个查询,但我不确定该怎么做。
我想创建一个视图 my_view 基于 table original_data_table 其中每个值都由 table [=56 中的非空值替换=] 只要指定了 id。
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
你需要COALESCE()
从右边得到正确的值table:
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;
试试这个:
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
尝试使用 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
| id | name | name |
|----|-------|------|
| 1 | David | 50 |
| 2 | Rick | 20 |
| 3 | Sarah | 30 |
| 4 | Emma | 60 |
我遇到了一个查询,但我不确定该怎么做。
我想创建一个视图 my_view 基于 table original_data_table 其中每个值都由 table [=56 中的非空值替换=] 只要指定了 id。
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
你需要COALESCE()
从右边得到正确的值table:
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;
试试这个:
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
尝试使用 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
| id | name | name |
|----|-------|------|
| 1 | David | 50 |
| 2 | Rick | 20 |
| 3 | Sarah | 30 |
| 4 | Emma | 60 |