使用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