内部连接查询中的 MySQL COALESCE?

标签 mysql sql inner-join coalesce

我是 SQL 的新手,我有一个非常基本的查询:

SELECT role.name AS role,
       `username`,
       game.name AS favorite_game,
       `reg_date`,
       `other_game`
FROM `user` 
INNER JOIN role
ON user.role = role.rid
INNER JOIN game
ON user.favorite_game = game.gid
ORDER BY role.weight DESC, user.reg_date ASC

它包含三个表userrolegame

user 表中,列 favorite_game 可以为空。如果是这种情况,我想显示 other_game 的内容,而不是 game 表中的名称。

反之亦然。 other_games可以为null,我想获取游戏的名称。

一列总是有一个值,因此它们不能同时为空。

我怎样才能做到这一点?我听说过 COALESCE,但我不知道如何在我的查询中使用它以及是否应该使用它。

最佳答案

是的,coalesce 正是您所需要的。它采用两个参数,如果不为空则返回第一个参数,否则返回第二个参数。

根据您编写查询的方式,我假设没有表名作为前缀的字段来自 user 表。如果是这种情况,您需要一个 left joingame 表(以防没有关联的行):

SELECT  tr.name AS role,
        tu.username,
        coalesce(tg.name, tu.other_game) AS favorite_game,
        tu.reg_date
FROM    user tu
JOIN    role tr
ON      tu.role = tr.rid
LEFT JOIN
        game tg
ON      tu.favorite_game = tg.gid
ORDER BY tr.weight DESC,
         tu.reg_date ASC

关于内部连接查询中的 MySQL COALESCE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43540043/

相关文章:

mysql 计数来自另一个表的多列

php - MySQL 和 PHP : How to arrange data from below example

mysql - SQL - 是否可以按行值制作自定义列?

mysql - 如何向数据库表中添加新列,表中存在大量数据

MySql搜索效率

php - 在 Laravel Supervisor 中使用多个排队作业的 Mysql 死锁

php - 收件箱sql查询解决方案

mysql查询结果。将三列值转换为结果中的一行并按第一列值排序

Mysql 内连接问题

java - 获取所有其他数组列表中的数组列表项的最快方法