簡體   English   中英

SELECT cols,(SELECT內部查詢)AS internalcol從表WHERE內部col

[英]SELECT cols, (SELECT inner query) AS innercol FROM table WHERE innercol something

只要我避免使用WHERE stream_json ...可以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。

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

請注意,您不需要為此檢查stream_json!= 0,因為它在INNER JOIN中是隱式的

您不能在同一級別訪問列別名。 您需要將其包裝到派生表中:

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的答案可能是這個問題的更好解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM