我有四个表:seriesseasonsepisodesimages。每个系列包括多个季节,其中包括多个情节。每个剧集都附有一个或多个图像。现在,我想检索一个系列,包括所有季节,剧集和图像。

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如果要具有任何seasonepisodes,则必须至少具有一个images。因此,丢失的seasons_id无论如何都不重要,因为您永远都希望匹配该episode的任何series记录。

10-06 13:02
查看更多