我对查询很困难,我不知道该怎么做。
我想根据表 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
答案 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
| id | name | name |
|----|-------|------|
| 1 | David | 50 |
| 2 | Rick | 20 |
| 3 | Sarah | 30 |
| 4 | Emma | 60 |