2017-08-31 18 views
0

私は4つのテーブル:series,seasons,episodes,imagesを持っています。各シリーズは複数の季節で構成され、複数のエピソードで構成されています。各エピソードには1つ以上の画像が添付されています。今私はすべての季節、エピソード、イメージを含む1つのシリーズを検索したいと思います。SQLクエリをチェーンする方法

上記のクエリは動作しません
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が利用できないので、私が代わりにネストされたクエリを使用する必要がありますか。

+0

なぜあなたはそれが利用できないと思いますか?サンプルデータ、テーブル構造、および望ましい結果を表示してください。 – Siyual

+0

あなたのテーブル構造を見て、利用可能なカラムを確認してください –

+2

'' episodes'を持っているのに 'seasons'(データの問題のようです)がない' series'を持っていなければ、あなたが今までに示したものを与えられた仕事。あなたのテーブルスキーマ、いくつかのサンプルデータ、取得した結果、および期待する結果を表示します。 –

答えて

-1

テーブルにエイリアスを使用していないので、MySQLにはどのテーブルが各テーブルに属しているのかわからないことがあります。すべてのテーブルにエイリアスを使用して、再度実行してみてください。

希望これは質問に投稿されたクエリで

+0

ありがとう、私の例を編集しました。 – bart

2

に役立ちます(それはそれに来る場合、および第三)、一般seasons_id、第2 LEFT JOINのために利用可能です。

クエリに追加JOIN Sを追加すると、それらのJOIN sが考慮に入れ、元FROM句からテーブルだけでなく、これまでのところ、追加JOINによって構築全体の結果セットだけでなく、取ります。これは常にテーブルのエイリアスを使用する理由の1つです...同じテーブルをJOINを介して2回以上クエリに含めることが可能で、エイリアスは同じテーブル。

seasons_idが利用できない唯一のケースは、seasonsレコードが関連付けられていないseriesレコードがある場合です。この場合、seasons_idの結果にはNULLの値があり、episodeレコードとそのseriesレコードをまったく結び付けることはできません。このスキーマでは、またはimagesがある場合、seriesにはいずれも少なくとも1つのseasonが必要です。したがって、seasons_idは、それでものいずれのepisodeレコードともマッチすることができないため、問題はありません。

1

クエリに間違いはありません。知られているエピソードのないシーズン2では、これらの非エピソードの画像はありません。ので、データベースが関係を強制した場合

Game of thrones, season 1, episode 1, image 1 
Game of thrones, season 2, null, null 

、あなたは王座シーズン2エピソード1のゲームから画像を挿入することはできないでしょう:それはあなただけのような結果が見、二つの季節を持つシリーズを停止しませんエピソードは最初に子供の画像の親である必要があります。あなたのデータベースが関係を執行しないならば、あなたは前進して、イメージのロードを挿入して、あなたがそれを挿入するために周りを回るときに得るs2 e1が予測する971のエピソードIDをすべて与えるID 971のエピソードがDBにまだ存在しない場合、あなたは孤立しているため、あなたの質問に表示されません

あなたのクエリにこれらの孤立した画像が表示されることを望むのであれば、

関連する問題