我有四个表:series
,seasons
,episodes
,images
。每个系列包括多个季节,其中包括多个情节。每个剧集都附有一个或多个图像。现在,我想检索一个系列,包括所有季节,剧集和图像。
SELECT * FROM series
LEFT JOIN seasons ON seasons.seasons_series_id=series.series_id
LEFT JOIN episodes ON episodes.episodes_seasons_id=seasons.seasons_id
LEFT JOIN images ON images.images_id=episodes.episodes_images_id
WHERE series.series_id=1
上面的查询不起作用,因为在运行第二个LEFT JOIN等时
seasons_id
不可用。我应该使用嵌套查询吗? 最佳答案
在发布到问题的查询中,seasons_id
通常可用于第二个LEFT JOIN
(如果涉及到第三个,则第三个)。
当您向查询中添加其他JOIN
时,这些JOIN
不仅要考虑原始FROM
子句中的表,还要考虑到目前为止任何其他JOIN
所建立的整个结果集。这就是为什么总是对表使用别名的一个好主意的原因之一……可以通过JOIN
在查询中多次包含同一个表,并且别名对于保持单个独立的实例很重要。同一张桌子。
当您的seasons_id
记录没有与之关联的series
记录时,唯一无法使用seasons
记录的情况。在这种情况下,您在NULL
的结果中将具有一个seasons_id
值,并且在所示的架构中您将根本无法将任何episode
记录与该series
记录连接起来。在此架构中,每个series
如果要具有任何season
或episodes
,则必须至少具有一个images
。因此,丢失的seasons_id
无论如何都不重要,因为您永远都希望匹配该episode
的任何series
记录。