WHERE 子句中未引用 MySQL CTE

Fin*_*eek 1 mysql where-clause common-table-expression

我无法理解为什么CTE不能从WHERE子句中引用 a 。在下面的代码中,第一个查询工作正常,但在第二个查询中,只需用WHERE计算该值的 CTE替换子句中的值,就会产生错误“'where 子句'中的未知列'cte'”。

# This query works

SELECT * FROM stock_prices
WHERE Country_Exchange_Code = 'T' AND Stock_Code IN ('1332');


# But this query produces an error

WITH
    cte AS (SELECT '1332')    
SELECT * FROM stock_prices
WHERE Country_Exchange_Code = 'T' AND Stock_Code IN (cte);


# Here is some data to test these two queries with

CREATE TABLE stock_prices (Country_Exchange_Code VARCHAR(2), Stock_Code VARCHAR(4), Date DATE, Close FLOAT);
INSERT INTO stock_prices VALUES
("T", "1301",   '2019-10-29',   75.2),
("T", "1301",   '2019-10-30',   76.6),
("T", "1301",   '2019-10-31',   77.6),
("T", "1301",   '2019-11-01',   77.2),
("T", "1332",   '2019-10-29',   52.5),
("T", "1332",   '2019-10-30',   49.7),
("T", "1332",   '2019-10-31',   50.8),
("T", "1332",   '2019-11-01',   50.4),
("T", "1333",   '2019-10-29',   13.9),
("T", "1333",   '2019-10-30',   13.8),
("T", "1333",   '2019-10-31',   14.3),
("T", "1333",   '2019-11-01',   14.4);
Run Code Online (Sandbox Code Playgroud)

Aki*_*ina 5

您可以cte使用TABLE关键字通过名称(不使用其中的子选择)来引用或另一个表。

WITH
    cte AS (SELECT '1332')    
SELECT * FROM stock_prices
WHERE Country_Exchange_Code = 'T' AND Stock_Code IN (TABLE cte);
Run Code Online (Sandbox Code Playgroud)

小提琴