如果联接不存在到第二个表中,则Mysql在一个表中使用列值

时间:2018-06-20 19:54:49

标签: mysql

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

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无法正常工作,则它应该从TableA中以通用别名“ mostFavoriteColor”返回“ secondFavoriteColor”的值,并且输出表将是两列,如果成功加入了TableB,则从TableA中提取“名称”,然后从TableB中提取“ mostFavoriteColor”,或者如果连接失败,则从TableA中提取。

关于在同一查询中如何使用它的任何想法?

1 个答案:

答案 0 :(得分:2)

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

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