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
4

4 に答える 4

1

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

これを参照してください

于 2013-10-02T10:02:29.887 に答える
1

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
于 2013-10-02T10:03:09.020 に答える
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 のチェックは必要ないことに注意してください。

于 2013-10-02T10:15:15.643 に答える
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 の回答は、おそらくこの問題に対するより良い解決策です。

于 2013-10-02T10:26:24.207 に答える