これを回避する限り機能WHERE stream_json ...
しますか、それとも JOINS が必要ですか?
SELECT id, stuff,
(SELECT count(*)
FROM inner_table
WHERE inner_table.movie_id = outer_table.id)
AS stream_json
FROM outer_table
WHERE stream_json != 0
これを回避する限り機能WHERE stream_json ...
しますか、それとも JOINS が必要ですか?
SELECT id, stuff,
(SELECT count(*)
FROM inner_table
WHERE inner_table.movie_id = outer_table.id)
AS stream_json
FROM outer_table
WHERE stream_json != 0
句HAVING
を使用して楽しませることができないカスタムエイリアスにアクセスするために使用できますWHERE
SELECT (SELECT count(*) FROM inner_table
WHERE inner_table.movie_id = outer_table.id) AS stream_json
FROM outer_table HAVING stream_json != 0
WHERE 条件ではエイリアスを使用できません。ただし、HAVING 条件では使用できます。別の選択肢は、サブクエリ全体を繰り返すことですが、それは見苦しく見えます。HAVING の使用をお勧めします。
SELECT (SELECT count(*) FROM inner_table
WHERE inner_table.movie_id = outer_table.id) AS stream_json
FROM outer_table HAVING stream_json != 0
上記のように、HAVING を使用するか、相関サブクエリを回避するサブセレクトに対して結合できます。
SELECT outer_table.id, outer_table.stuff, stream_json
FROM outer_table
INNER JOIN
(
SELECT movie_id, count(*) AS stream_json
FROM inner_table
GROUP BY movie_id
) Sub1
ON Sub1.movie_id = outer_table.id
これは INNER JOIN で暗黙的であるため、 stream_json != 0 のチェックは必要ないことに注意してください。
同じレベルの列エイリアスにはアクセスできません。それを派生テーブルにラップする必要があります。
select *
from (
SELECT id,
stuff,
(SELECT count(*)
FROM inner_table
WHERE inner_table.movie_id = outer_table.id) AS stream_json
FROM outer_table
) t
WHERE stream_json <> 0;
しかし、Kickstart の回答は、おそらくこの問題に対するより良い解決策です。