web-dev-qa-db-ja.com

副選択を使用してLEFTJOINを実行する

複数の列が必要な場合、副選択を使用してLEFTJOINと同等の機能を実現できます。これが私の言いたいことです。

SELECT m.*, (SELECT * FROM model WHERE id = m.id LIMIT 1) AS models FROM make m

現在のところ、これを実行すると、「オペランドには1つの列が含まれている必要があります」というエラーが発生します。

はい、これはLEFT JOINで可能であることは知っていますが、サブセレクトで可能であると言われました。それがどのように行われるのか興味があります。

14
Andre

副選択では、そこから返される列は1つだけであるため、モデルテーブルから返される列ごとに1つの副選択が必要になります。

7
MisterZimbu

あなたが提案するものには多くの実用的な使用法があります。

この架空のクエリは、少なくとも1つのrelease_dateを含むすべてのmakeに対して最新のrelease_date(考案された例)を返し、release_dateを含まないすべてのmakeに対してnullを返します。

SELECT m.make_name, 
       sub.max_release_date
  FROM make m
       LEFT JOIN 
           (SELECT id, 
                   max(release_date) as max_release_date
              FROM make 
           GROUP BY 1) sub
       ON sub.id = m.id
23
bernie