2016-09-10 14 views
0

私はいくつかの値がオプションである大きな複数のテーブルクエリ結合selectを持っています。SQL:行が欠落している複数のテーブルを選択します。

これはクエリである:

上記のクエリからテーブルで

、次の列(idservices_idreservation_id)とservices_reservationという名前のテーブルの値になり、この場合、完全に空であります私はテーブルbike_shipping_reservationから選択します。

私が選択したいくつかのテーブルを、空の場合はオプションから選択する方法を教えてください。

ここでは、1つの空のテーブルを持つSQL Fiddleがあります。最後にNULL結果が表示されます(GROUP_CONCAT(DISTINCT g.service)のみがNULLである必要があります)。ここで

http://sqlfiddle.com/#!9/ee31b/6

SQLフィドルがある列の値を持つすべてのテーブルであり、あなたはすべての値がNULLでない返されることがわかります。

http://sqlfiddle.com/#!9/8bc033/34

任意の考え? * * `FROM`句にカンマを使用しないでください:

+0

単純なルールに一致していない上、空のどこに参加残しました。 *常に* ON句の条件と明示的な 'JOIN'構文を使用します。 –

+0

@ Gordon Linoff - 私の問題を解決するだろうか? – Speedwheelftw

+0

@GordonLinoffが既に述べたように、組み合わせの動作(LEFT、INNER ...)を指定できる明示的な 'JOIN'構文を使用してください。必要に応じてサイド・ジョインを使用して結果を達成する可能性が最も高くなります。 –

答えて

1

使用すると、テーブル(または列)が

SELECT a.date_in, a.date_out, b.name, b.phone, b.birthdate, 
b.country, b.hotel, b.room_nr, b.passport_nr, c.email, 
d.size, e.name, GROUP_CONCAT(DISTINCT g.service), GROUP_CONCAT(DISTINCT  h.service) 
, GROUP_CONCAT(DISTINCT i.time), GROUP_CONCAT(DISTINCT j.location) 

FROM reservation a 
INNER JOIN rider b on a.rider_id = b.id 
INNER JOIN user c on b.user_id = c.id 
INNER JOIN bike_size d on a.bike_size_id = d.id 
INNER JOIN bike e ON d.bike_id = e.id 
LEFT JOIN services_reservation f on a.id = f.reservation_id 
INNER JOIN services g on f.services_id = g.id 
INNER JOIN bike_shipping_reservation i on a.id = i.reservation_id 
INNER JOIN bike_shipping h ON h.id = i.bike_shipping_id 
INNER JOIN bike_shipping_location j on i.bike_shipping_location_id = j.id 
where a.id = 80 
+0

ありがとう、それはトリックでした。 – Speedwheelftw

関連する問題