1

問題:

SQL ステートメントの条件に基づいてテーブルを結合する方法を理解しようとしています。Google、SO、さまざまな Web サイト、および MYSQL マニュアルを 1 時間かけて検索しましたが、やりたいことの正しい構文が見つかりません。

作業しようとしている正確なクエリを投稿することはできませんが、簡単にするために簡略化されたバージョンを投稿します。

シナリオ:

a= person テーブル、b= address テーブル、c= car テーブルの 3 つのテーブルがあるとします。

人は常に住所に住んでいるため、テーブルは常にテーブルに結合されますが、車を持つことはオプションであるため、「car_id」フィールドの値が0より大きい場合にのみテーブルにb結合する必要があります。aca

クエリ:

SELECT a.firstname, a.lastname, a.gender, a.address_id, b.address_firstline,  b_address_secondline, b.postcode, c.car_manufacturer, c.car_model 
FROM a 
INNER JOIN b ON b.id = a.address_id 
INNER JOIN c ON c.id = a.car_id AND a.car_id > 0 
WHERE a.id = 1

ID が 1 の人は車を所有しているため、上記のクエリは正常に実行されます。ただし、id が 2 の人物に対してクエリを実行すると、彼女は車を所有していないため、クエリは 0 行を返します。

この 2 番目の JOIN をオプションにするにはどうすればよいですか? IF ELSE ステートメントを使用してみましたが、常に構文エラーが発生します。誰かが私をここで正しい方向に向けることができますか? 前もって感謝します

4

2 に答える 2

3

on tableLEFT JOINの代わりに使用します。INNER JOINc

このシナリオでは、一方的な結合が機能します。

簡単な説明。

  • a INNER JOIN b ON a.field1 = b.field1a.field1との両方b.field1が存在し、 が等しいすべての行を返します
  • a LEFT JOIN b ON a.field1 = b.field1は table からすべての行aを返し、 table の のすべての行と、 tableの一致しない値の値をb返します。a.field1 = b.field1nullb
  • RIGHT JOINに類似しているLEFT JOIN
于 2013-04-02T19:26:45.940 に答える