如果第二个表不存在连接,Mysql 使用一个表中的列值

Posted

技术标签:

【中文标题】如果第二个表不存在连接,Mysql 使用一个表中的列值【英文标题】:Mysql Use Column Value In One Table If Join Doesn't Exist To Second Table 【发布时间】:2018-06-20 19:54:49 【问题描述】:

我正在尝试找到一种方法来返回以下示例中最喜欢的颜色。如果可能,在同一个查询中。

TableA

id | name | secondFavoriteColor
-----------------------
0  | john | blue
1  | sam  | red

TableB

id | userid | favoriteColor
----------------------------
0  | 1      | orange


SELECT TableA.name, [[mostFavoriteColor]] FROM TableA JOIN TableB ON TableA.id = TableB.userid

这应该返回

name | mostFavoriteColor
-------------------------
john | blue
sam  | orange

基本上,TableA 将在“secondFavoriteColor”列中包含一个默认值,而 TableB 将包含每个用户的实际收藏夹。 TableB 并不总是对每个用户都有一条记录,但是如果 JOIN 不起作用,那么它应该在通用别名“mostFavoriteColor”下从 TableA 返回“secondFavoriteColor”的值,并且输出表将是两列如果连接成功,则从 TableA 中提取“name”,如果连接失败,则从 TableB 中提取“mostFavoriteColor”。

关于这如何与相同的查询一起工作的任何想法?

【问题讨论】:

【参考方案1】:

您需要在表 b 上进行左连接,因此如果在表 b 中找不到用户的行,它将返回 null,然后使用 COALESCE 选择第一个非空值

SELECT a.name, COALESCE(b.favoriteColor, a.secondFavoriteColor) mostFavoriteColor
FROM TableA a
LEFT JOIN TableB b ON a.id = b.userid

【讨论】:

以上是关于如果第二个表不存在连接,Mysql 使用一个表中的列值的主要内容,如果未能解决你的问题,请参考以下文章

索引视图中完全外连接的替代方案

如果一个表的列等于第二个表中的列,则在第三个表中插入值,python - mysql

Laravel 连接 2 个表,第一个表中的一个数据和第二个表中的多行

对第二个表中不存在 ID 的两个表的 MySQL 查询优化

T-SQL:比较两个表 - 第二个表中不存在的记录

BigQuery - 按第二个表中存在的值过滤数据