cross join
の特殊なケースですinner join
。条件のない内部結合です。つまり、テーブルのすべての行を結合します。それが存在する唯一の理由は、 のようなばかげたステートメントを書く必要がないようにするためですinner join TABLE on 1=1
。
すべての行を結合する場合にのみ、クロス結合を使用する必要があります。それを使用してから、where
どの行が一致するかを指定する句に条件を含めることは意味がありません(あなたが行っているように)。
これを行う適切な方法は useであり、句ではなく句でinner join
結合条件を指定します。これにより、クエリがより論理的なフローになり、多くの場合、より効率的になります (結果から行を除外するのが早ければ早いほど、クエリの実行は速くなります)。on
where
を使用する改訂されたクエリを次に示しますinner join
。
select T.PRICE, S.ROW, S.NUMBER, M.TITLE
from [cinema_no_keys].[dbo].[TICKET] T
inner join [cinema_no_keys].[dbo].[SEAT] S on
T.ID_SEAT = S.ID_SEAT
inner join [cinema_no_keys].[dbo].[SHOW] SH on
SH.DATE_HOUR = T.DATE_HOUR
inner join [cinema_no_keys].[dbo].[MOVIE] M on
M.ID_MOVIE = SH.ID_MOVIE
結合の順序を変更しました。movie
のフィールドへのリンクは のshow
前show
に来る必要があるためmovie
です。