[英]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
但不會創建新表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.