簡體   English   中英

mysql - 如果第一個表中有空值,如何連接兩個表並僅從第二個表添加值?

[英]mysql - how to join two tables and only add values from the second table if there are nulls in the first table?

具有 X 和 Y 字段的表 A。 一些 Y 字段為空白。 表 B 有 X 和 Z 字段。 如何加入 A 和 B 以便只有空白的 Y 字段填充 Z 值,並且在不創建新表並合並它的情況下不會覆蓋現有的 Y 字段?

A
X1    Y1
X2    
X3    Y2

B
X1    Z1
X2    Z2
X3

A join B
X1    Y1
X2    Z2
X3    Y2

如果表a缺少如下信息,您可以使用這樣的查詢來顯示表b中的數據:

select a.f1, coalesce(a.f2, b.f2) as f2 from a left join b on a.f1 = b.f1;
+------+------+
| f1   | f2   |
+------+------+
| X1   | Y1   |
| X2   | Z2   |
| X3   | Y2   |
+------+------+

請注意,這不會更改您的表格。 它只是您想要的 output 信息。

如果您想實際更新表a並使用表b中的值填充缺失值,您可以執行以下操作:

update a inner join b on a.f1 = b.f1
set a.f2 = b.f2
where a.f2 is null and b.f2 is not null;

然后,您的表a將如下所示:

select * from a;
+------+------+
| f1   | f2   |
+------+------+
| X1   | Y1   |
| X2   | Z2   |
| X3   | Y2   |
+------+------+

我使用的示例表是:

create table a (f1 char(2), f2 char(2));
create table b (f1 char(2), f2 char(2));
insert into a values ('X1', 'Y1'), ('X2', null), ('X3', 'Y2');
insert into b values ('X1', 'Z1'), ('X2', 'Z2'), ('X3', null);

您可以使用UNION執行兩個不同的SELECT語句。

SELECT v1, v2 FROM A WHERE v2 is NOT NULL
UNION ALL
SELECT B.v1, B.v2 FROM A, B 
  WHERE B.v1 = A.v1 
  AND A.v2 IS NULL
  AND B.v2 IS NOT NULL

第一個負責處理A中存在值的主要情況。 當值不在A中但在B中時,第二個負責處理。

這確實使用了UNION但不會創建新表。

http://sqlfiddle.com/#!9/65c497/2

暫無
暫無

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

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