質問: 昨日も同じ質問させていただきましたが、質問がちょっと違いましたので、改めて質問させていただきます。 状況を説明します。 table1 | id | owner | staff | | --- | --- | --- | | 1 | 2 | 2 | | 2 | 1 | 3 | | 3 | 3 | 1 | | 4 | 2 | 3 | | 5 | 1 | 3 | table2 | id | user_id | name | | --- | --- | --- | | 1 | abcd | 山田 | | 2 | bcad | 中村 | | 3 | cbda | 高橋 | データベースに二つのテーブルがありまして、 table1のownerとstaffの値はtable2のidです。 そしてownerとstaffのデータを取り出すときに、数字ではなく、 talbe2のidを見て、nameの値を出したいです。 そして、今のtable2にはid三つしかないですが、例えばtalbe1のownerとstaffに4もしくは5が存在するときには、table2のidを見て、ないidは[データありません]と表示したいです。 以上です。 説明下手で申し訳ないです。 まったくdbの初心者ですので、わかりやすくお願いいたします。 何卒、宜しくお願いいたします。
回答: 副問合せをするより、`LEFT JOIN`を活用したほうがスッキリ書けると思います。 ``` SELECT table1.id AS id, COALESCE(owners.name, '[データありません]') AS owner_name, COALESCE(staffs.name, '[データありません]') AS staff_name FROM table1 LEFT JOIN table2 AS owners ON owners.id = table1.owner LEFT JOIN table2 AS staffs ON staffs.id = table1.staff ``` なお、「他のテーブルにない値を入れる必要がある」などの特段の事情がない限り、リレーションに使う列には**外部キー制約**を入れて、「参照先が見つからない」事態を避けるようにするべきだとは思います。