使用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 JOIN作品的解釋:http://www.mysqltutorial.org/mysql-left-join.aspx
MySQL的LEFT JOIN子句是這樣工作的:當從左側 表中的行匹配的行從基於join_condition的右表中選擇 行的內容作爲輸出行。當左邊的 表中的行沒有匹配時,它仍然被選中用於輸出,但是與 合併在右表中包含所有列中的NULL的「假」行。 總之,MySQL LEFT JOIN子句允許您從左表中選擇所有行 ,即使它們在右表 中沒有匹配。
當您有多個LEFT JOIN時,那麼在每種情況下,它將使用累計結果,直到「左」表和您加入的表爲「右」表。
因此,上面的查詢將爲每個帖子/位置/國家返回一行。請注意,這意味着將有數個行可能具有相同的post.*
數據(每個postlocation
與該帖子相關聯)。
如果帖子沒有與其關聯的帖子,該帖子仍然會顯示在結果中(但空行爲location.*
和country.*
)。同樣,如果一個位置沒有國家將它與它關聯,那麼帖子/位置行將仍然顯示在輸出中(但對於country.*
爲空行)。這是LEFT JOIN的優點 - 您始終可以從左側的表格中獲取所有行。
這是完美的 - 正是我以後。非常感謝你的幫助。 – 2012-03-02 10:53:27