mysql - SQL:连接表也显示空值

标签 mysql sql

我有这样的表:

表 1:

id | item_name | entered_by | modify_by
1  | banana    |     2      |    1
2  | apple     |     4      |    3
3  | orance    |     1      |    1
4  | pineapple |     5      |    3
5  | grape     |     6      |    1

表 2:

id | username 
1  | admin
2  | jack
3  | danny
4  | dummy
5  | john
6  | peter

查询可以很好地选择 entered_by 或 modify_by 是否具有值:

SELECT t1.id, t1.item_name,
  t2enteredBy.username enteredBy,
  t2modifyBy.username modifyBy
FROM table1 t1
JOIN table2 t2enteredBy ON t1.entered_by = t2enteredBy.id
JOIN table2 t2modifyBy ON t1.modify_by = t2modifyBy.id

问题:如果 modifiy_by 或 entered_by 字段之一具有空值,该行现在显示出来,如果它具有空值而不是隐藏,我需要将其显示为“-”该行完全。

SQLFIDDLE HERE

最佳答案

试试这个:

SELECT t1.id, t1.item_name,
  COALESCE(t2enteredBy.username, '-') enteredBy,
  COALESCE(t2modifyBy.username, '-') modifyBy
FROM table1 t1
LEFT JOIN table2 t2enteredBy ON t1.entered_by = t2enteredBy.id
LEFT JOIN table2 t2modifyBy ON t1.modify_by = t2modifyBy.id

fiddle here .

您需要一个left join 来返回那些具有null 值的行。然后 coalesce 将确保它们在 null 时被给定的字符串替换。

关于mysql - SQL:连接表也显示空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19700739/

相关文章:

php - Ajax Mysql PHP 如何将 $_SESSION 数组结果显示到 DIV 中

关于count的mysql查询问题

python - MySQL 和 Python 是构建桌面应用程序的不错选择吗?

mysql - 用于存储用户多种爱好的关系数据库结构

mysql - 当在 utf8mb4 数据和子字符串 ü😋 上有索引时,MySql 和 MariaDB 中的错误?

php - 页面请求过多

PHP 新闻每页 5/分页 下一页 - 上一页

sql - 使用另一个表中的数据更新 Teradata 表中的列

mysql - 通过 mysql 中的临时表可以加快删除速度

sql - 列出 SQL 中两个日期之间的所有工作日期