使用LEFT JOIN
:
SELECT post.*, location.*, country.*
FROM post
LEFT JOIN postlocation ON post.id = postlocation.post_id
LEFT JOIN location ON postlocation.location_id = location.id
LEFT JOIN country ON location.country_id = country.id
ここでLEFTが作品に参加する方法の説明です:http://www.mysqltutorial.org/mysql-left-join.aspx
MySQLのLEFTは、JOIN句は次のように動作します。左 テーブルから行が行と一致したときjoin_conditionに基づく右側の表から、 行のコンテンツが出力行として選択されます。左の行に テーブルが一致しない場合、それはまだ出力のために選択されていますが、 と組み合わせると、すべての列にNULLを含む右側のテーブルの「偽の」行が表示されます。 要するに、MySQL LEFT JOIN節では、右の テーブルに一致するものがなくても、左のテーブルからすべての行 を選択することができます。
LEFT JOINが複数ある場合は、それぞれ左側のテーブルと右側のテーブルとして結合しているテーブルまでの累積結果を使用します。
したがって、上記のクエリは、投稿/場所/国ごとに1つの行を返します。これは、同じpost.*
のデータを持つ複数の行が存在する可能性があることを意味しています(それぞれの投稿に関連付けられた各postlocation
に1つ)。
ポストに関連付けられたポストプロビジョニングがない場合、そのポストはまだ結果に表示されます(ただし、ヌル行はlocation.*
とcountry.*
)。同様に、ロケーションに関連付けられている国がない場合でも、ポスト/ロケーション行は出力に表示されます(ただし、ヌル行はcountry.*
)。これはLEFT JOINの利点です。テーブルのすべての行を常に "左"に表示します。
これは完璧です - まさに私が何をしていたのですか?手伝ってくれてどうもありがとう。 –