【发布时间】:2021-03-25 18:00:50
【问题描述】:
我们试图解决的问题最好通过以下说明性示例来说明:
CREATE TABLE table_1
(
id INT UNSIGNED AUTO_INCREMENT,
colA INT,
colB VARCHAR(10),
PRIMARY KEY(id)
);
CREATE TABLE table_2
(
id INT UNSIGNED AUTO_INCREMENT,
colY INT,
colZ VARCHAR(10),
PRIMARY KEY(id)
);
INSERT INTO table_1(colA, colB) VALUES(1, 'NPD5A6V9EI'), (2, 'ISO4IK42YQ'), (4, 'J12QAN4O42'), (6,'V8YTZFHCU4');
INSERT INTO table_2(colY, colZ) VALUES(3, 'RBUNWLO753'), (4, 'X2BCEY7O8B'), (5, 'BNUS7R4225'), (6, '72NOWCTH5G');
我们想根据table_1 中colA 的值来选择我们的结果,但是如果这没有返回结果,我们想根据table_2 中colY 的值返回我们的结果.换句话说,从table_2 选择是从table_1 选择的备份。只有当两个表都不满足条件时,查询才会返回NULL。
伪 SQL 查询可能是:
SELECT colB FROM table_1 where colA = 3 OR SELECT colZ FROM table_2 where colY = 3;
查询应根据以下 I/O 表返回输出:
I O
= =
1 NPD5A6V9EI -- From table_1
2 ISO4IK42YQ -- From table_1
3 RBUNWLO753 -- From table_2
4 J12QAN4O42 -- From table_1 (has precedence over table_2 entry)
5 BNUS7R4225 -- From table_2
6 V8YTZFHCU4 -- From table_1 (has precedence over table_2 entry)
9 NULL
请提出以下解决方案:
- 利用最新的数据库功能(供后代使用)
- 使用 MySQL 版本
5.6.51(用于我们的应用程序)
【问题讨论】:
-
使用
LEFT JOIN。如果连接的列是 NULL,则使用来自另一个表的列与COALESCE或IFNULL -
@Barmar left join 不起作用,因为表 A 中缺少某些键值,这时表 B 应该启动。联合似乎是更好的方法。
-
请解释一下 - 所需输出
(9, NULL)的最后一行来自哪里?