为什么我的内心 table 不能 select?

Why cant I select on my inner table?

我不明白为什么我可以这样做:

SELECT YEAR(CREATION_TIME) AS y, MONTH(CREATION_TIME) as m, COUNTRY_CODE
FROM PRODUCTS INNER JOIN COMPANIES
ON COMPANIES.COMPANY_KEY = PRODUCTS.CUSTOMER_ID
WHERE CREATED_BY IN ('VOLVO','SAAB')

但不是

SELECT y FROM
(
    SELECT YEAR(CREATION_TIME) AS y, MONTH(CREATION_TIME) AS m, COUNTRY_CODE
    FROM PRODUCTS INNER JOIN COMPANIES
    ON COMPANIES.COMPANY_KEY = PRODUCTS.CUSTOMER_ID
    WHERE CREATED_BY IN ('VOLVO','SAAB')
)

我收到以下错误:

Error: DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=;;CORRELATION NAME, DRIVER=3.53.70 SQLState: 42601 ErrorCode: -104 Error: DB2 SQL Error: SQLCODE=-514, SQLSTATE=26501, SQLERRMC=SQL_CURLH200C1, DRIVER=3.53.70 SQLState: 26501 ErrorCode: -514

然而,我的最终目标是做类似的事情:

SELECT y, m, COUNTRY_CODE, count(*)
FROM
(
    SELECT YEAR(CREATION_TIME) AS y, MONTH(CREATION_TIME) AS m, COUNTRY_CODE
    FROM PRODUCTS INNER JOIN COMPANIES
    ON COMPANIES.COMPANY_KEY = PRODUCTS.CUSTOMER_ID
    WHERE CREATED_BY IN ('VOLVO','SAAB')
)
GROUP BY y, m, COUNTRY_CODE

您在第二个查询中的语法不正确。您不能在不引用 table 的情况下引用列别名。这应该有效:

SELECT t.y FROM
(
    SELECT YEAR(CREATION_TIME) AS y, MONTH(CREATION_TIME) AS m, COUNTRY_CODE
    FROM PRODUCTS INNER JOIN COMPANIES
    ON COMPANIES.COMPANY_KEY = PRODUCTS.CUSTOMER_ID
    WHERE CREATED_BY IN ('VOLVO','SAAB')
) AS t

您一定是 运行 一个非常旧的 DB2 版本。在某些时候子选择需要相关名称,所以试试这个:

SELECT t.y FROM
(
    SELECT YEAR(CREATION_TIME) AS y, MONTH(CREATION_TIME) AS m, COUNTRY_CODE
    FROM PRODUCTS INNER JOIN COMPANIES
    ON COMPANIES.COMPANY_KEY = PRODUCTS.CUSTOMER_ID
    WHERE CREATED_BY IN ('VOLVO','SAAB')
) AS t