【问题标题】:Why cant I select on my inner table?为什么我不能在内表上选择?
【发布时间】:2015-06-30 08:49:34
【问题描述】:

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

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')
)

我收到以下错误:

错误:DB2 SQL 错误:SQLCODE=-104,SQLSTATE=42601, SQLERRMC=;;相关名称,驱动程序=3.53.70 SQLState:42601 错误代码:-104 错误:DB2 SQL 错误:SQLCODE=-514,SQLSTATE=26501, SQLERRMC=SQL_CURLH200C1,驱动程序=3.53.70 SQLState:26501 错误代码: -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

【问题讨论】:

  • 不了解 db2,但尝试为您的子查询提供别名。像 SELECT y FROM(...) as T
  • 旁注 - 以这种方式按提取的年份和月份分组将忽略索引。加入虚拟/永久日历表可能会带来更好的性能(并且无需包装这部分查询)。永久日历表对这类事情非常有用。

标签: sql select db2


【解决方案1】:

您必须运行一个非常旧的 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

【讨论】:

  • 工作得很好,谢谢。答案交给你。如此接近@TimBiegeleisen ;)
  • 他也可能在 z/OS 上。即使在版本 11 中,您也必须有别名。他们不喜欢在大型机上进行更改...
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2022-11-18
    • 1970-01-01
    • 2010-10-05
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-12
    相关资源
    最近更新 更多