合并问题

时间:2012-09-11 00:05:09

标签: mysql sql coalesce

我有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

1 个答案:

答案 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 JOININNER JOIN之间的区别在于LEFT JOIN会返回左表中的所有行,无论它是否与右表匹配,而INNER JOIN仅返回两个表中都存在的行。

<强> Visual Representation of JOINS