簡體   English   中英

基於兩個具有值替換的表創建視圖

[英]Create a view based on two tables with value substitution

我在查詢中掙扎,我不確定該怎么做。

我想基於表original_data_table創建一個視圖my_view ,其中每當指定一個ID時,每個值都將由來自表replace_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

replace_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

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

嘗試這個:

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

SQL小提琴演示鏈接

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM