假设我有两个表:
CREATE TABLE A(
id INT PRIMARY KEY,
x INT,
y INT
)
CREATE TABLE B(
id INT PRIMARY KEY,
x INT,
y INT,
)
表 A 包含从其他供应商带来的数据,而表 B 是我们的数据。为简单起见,我使这些表在架构方面完全相同,但表 B 可能是表 A 的超集(换句话说,它将包含表 A 不会包含的一些列)。
我想做的是创建一个包含列 id、x 和 y 的 View C,这样这些值来自表 B,除非它们为 NULL,在这种情况下它们将来自表 A。例如,假设我有以下内容:
INSERT INTO A (id, x, y)
VALUES (1, 2, 3);
INSERT INTO B (id, x, y)
VALUES (1, NULL, NULL);
INSERT INTO A (id, x, y)
VALUES (2, 3, 4);
INSERT INTO B (id, x, y)
VALUES (2, 5, 6);
INSERT INTO A(id, x, y)
VALUES (3, 4, 5);
INSERT INTO B(id, x, y)
VALUES (3, 5, NULL);
因此,如果我从 C 中选择 *,我将得到以下行:
(1, 2, 3)
(2, 5, 6)
(3, 5, 5)
如何创建这样的 View ?
最佳答案
您可以使用 left join
将表连接在一起,然后使用 case
选择正确的列:
select case when A.x is null then B.x else A.x end
, case when A.y is null then B.y else A.y end
from A
left join
B
on A.id = b.id
关于sql - 我怎样才能让一个表 "overrides"另一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3622406/