我有2个表格,例如
user_table level_table
================== ===================
| name | levelid | | id | levelname |
================== ===================
| tom | 1 | | 1 | beginner |
------------------ -------------------
| jon | 2 | | 2 | intermed |
------------------ -------------------
| tom | null | | 3 | expert |
------------------ -------------------
| jon | 1 |
------------------
我需要选择只有levelname的用户表,如果为null,它将显示我定义的文本,如'no level'。并且没有相同的列标题。 所以它看起来像是左边的而不是右边的那个。
Right result Wrong result
================== ==================
| name | level | | name | level |
================== ==================
| tom | beginner | | tom | beginner |
------------------ ------------------
| jon | intermed | | jon | beginner |
------------------ ------------------
| tom | no level | | tom | beginner |
------------------ ------------------
| jon | beginner | | jon | beginner |
------------------ ------------------
我尝试过合并,但似乎所有levelname行都显示相同的结果是错误的。
SELECT name,
COALESCE(
(SELECT levelname FROM user_table,level_table WHERE levelid=id),
'no level') AS level
FROM user_table
答案 0 :(得分:6)
应该是这样的,您需要使用LEFT JOIN
SELECT a.name, COALESCE(b.levelname, 'no level') levelname
FROM user_table a
LEFT JOIN level_table b
ON a.levelid = b.id
LEFT JOIN
和INNER JOIN
之间的区别在于LEFT JOIN
会返回左表中的所有行,无论它是否与右表匹配,而INNER JOIN
仅返回两个表中都存在的行。