Oracle sql 连接计数给了我 00904 的错误。00000 - "%s: invalid identifier

Posted

技术标签:

【中文标题】Oracle sql 连接计数给了我 00904 的错误。00000 - "%s: invalid identifier【英文标题】:Oracle sql count of join gives me error of 00904. 00000 - "%s: invalid identifier 【发布时间】:2021-03-27 19:55:44 【问题描述】:

这是我的查询,它试图获取 CUSTOMERS 表中列出的多少个 CUSTOMER_ID 也已经在 TRANSACTIONS 表中。

SELECT
    DISTINCT COUNT(*)
FROM
    (
        SELECT
            CUSTOMERS.CUSTOMER_ID
        FROM
            CUSTOMERS
        INNER JOIN TRANSACTIONS 
        ON CUSTOMERS.CUSTOMER_ID = TRANSACTIONS.CUSTOMER_ID
    )

这个查询返回

    00000 - “%s:无效标识符错误。

如何解决我的查询问题?

【问题讨论】:

SELECT DISTINCT COUNT(*) FROM?!?预计会返回什么? DISTINCT COUNT(*) 可能不是你的意思,看看这个dbfiddle.uk/… 了解它的作用。至于你的实际错误,错误信息是指哪一行哪一列? 我试图获取连接查询的每个不同 CUSTOMER_ID 的计数。请问什么是真正的方法可以帮助我吗? 谢谢@AndrewSayer 我想我明白了 COUNT() 但问题是它仍然给我标识符错误,我无法获得 CUSTOMERS 和 TRANSACTIONS 表之间相交的客户数量跨度> @merts97 请得到完整的错误信息,你应该得到一个行号和一个列号来表明你的查询中的哪个词是无效的。然后确保它确实正确 - 例如,如果它是CUSTOMER_ID,请确保这就是该列的名称。如果您的错误消息正是您分享的内容,那么我建议从 Sql*plus 或 SQL Developer 之类的东西运行查询,它们不会隐藏此详细信息 【参考方案1】:

count(*) 将始终返回一个数字,因此没有必要在其上执行 distinct。听起来您想要的更像是:

SELECT COUNT( DISTINCT CUSTOMERS.CUSTOMER_ID )
  FROM CUSTOMERS
 INNER JOIN TRANSACTIONS 
         ON CUSTOMERS.CUSTOMER_ID = TRANSACTIONS.CUSTOMER_ID

【讨论】:

【参考方案2】:

假设transactions 中的customer_id 只能是有效的customers.customer_id,那么您可以非常简化:

SELECT COUNT(DISTINCT T.CUSTOMER_ID)
FROM TRANSACTIONS T;

这是一个非常合理的假设。在结构合理的数据库中,TRANSACTIONS.CUSTOMER_ID 将被声明为CUSTOMERS.CUSTOMER_ID 的外键。

【讨论】:

以上是关于Oracle sql 连接计数给了我 00904 的错误。00000 - "%s: invalid identifier的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Oracle SQL 语句中重用动态列?

Mysql 计数给了我一个非常糟糕的性能,我做错了吗?

Oracle SQL Developer - 计数函数

ORA-00904: 相关子查询上的列名无效

oracle sql developer oracle-00904 存储过程执行错误

ORA-00904 Linq 在 Oracle 的 SQL 查询中生成错误