2

たとえば、2つのテーブルがあります

user_table                    level_table
==================           ===================
| name | levelid |           | id | levelname  |
==================           ===================
| tom  |    1    |           | 1  |  beginner  |
------------------           -------------------
| jon  |    2    |           | 2  |  intermed  |
------------------           ------------------- 
| tom  |  null   |           | 3  |   expert   |
------------------           -------------------
| jon  |    1    |          
------------------     

nullの場合、「レベルなし」などの定義済みテキストが表示されるレベル名のみのユーザーテーブルを選択する必要があります。同一の列ヘッダーはありません。したがって、この右のものではなく、左のもののように表示されます。

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

合体を試みましたが、すべてのレベル名行が同じ結果を示すという間違いがあるようです。

SELECT name,
       COALESCE(
               (SELECT levelname FROM user_table,level_table WHERE levelid=id),
               'no level') AS level
       FROM user_table
4

1 に答える 1

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 JOININNER JOIN

JOINS の視覚的表現

于 2012-09-11T00:07:32.693 に答える