Java ApacheDerby:列引用';xx和x27;无效,或是无效表达式的一部分。

Java ApacheDerby:列引用';xx和x27;无效,或是无效表达式的一部分。,java,sql,derby,Java,Sql,Derby,使用ApacheDerby(10.12.1.1),我创建了以下表: CREATE TABLE ROWCONTENT( ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1) PRIMARY KEY, MD5SUM CHAR(32) UNIQUE, CONTENT CLOB, CONTIG VARCHAR(20), START INT, STOP INT, REF VARCHAR(50) NOT

使用ApacheDerby(10.12.1.1),我创建了以下表:

CREATE TABLE ROWCONTENT(
ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1) PRIMARY KEY,
MD5SUM CHAR(32) UNIQUE,
CONTENT CLOB,
CONTIG VARCHAR(20),
START INT,
STOP INT,
REF VARCHAR(50) NOT NULL
);

CREATE TABLE VCF(
ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1) PRIMARY KEY,
NAME VARCHAR(255)
);

CREATE TABLE VCFROW(
ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1) PRIMARY KEY,
VCF_ID INTEGER CONSTRAINT row2vcf REFERENCES VCF,
ROW_ID INTEGER CONSTRAINT row2content REFERENCES ROWCONTENT
);
但是当我尝试使用下面的语句进行选择时

SELECT
 VCF.ID,VCF.NAME, COUNT(VCFROW.ID)  as "COUNT_VARIANTS"
FROM
  VCF,VCFROW,ROWCONTENT
WHERE
  VCFROW.VCF_ID=VCF.ID AND
  VCFROW.ROW_ID = ROWCONTENT.ID AND
  ROWCONTENT.CONTIG IS NOT NULL
GROUP BY VCF.ID
我得到以下例外情况:

java.sql.SQLSyntaxErrorException: Column reference 'VCF.NAME' is invalid, or is part of an invalid expression.  For a SELECT list with a GROUP BY, the columns and expressions being selected may only contain valid grouping expressions and valid aggregate expressions.
    at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
    at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source)
    at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(Unknown Source)
    at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Unknown Source)
    at org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown Source)
    at org.apache.derby.impl.jdbc.ConnectionChild.handleException(Unknown Source)
    at org.apache.derby.impl.jdbc.EmbedStatement.execute(Unknown Source)
    at org.apache.derby.impl.jdbc.EmbedStatement.executeQuery(Unknown Source)
你知道为什么吗?
谢谢。

首先使用显式
加入:

...
FROM VCF
JOIN VCFROW 
  ON VCFROW.VCF_ID=VCF.ID
JOIN ROWCONTENT
  ON VCFROW.ROW_ID = ROWCONTENT.ID
WHERE ROWCONTENT.CONTIG IS NOT NULL
GROUP BY VCF.ID;
还可以添加表别名,这样就不必编写整个表名


第二个
VCF.NAME
不是
groupby
的一部分,它没有使用聚合函数包装

根据需要使用:

GROUP BY VCF.ID,VCF.NAME
-- or
SELECT VCF.ID, MAX(VCF.NAME) AS NAME, COUNT(VCFROW.ID) AS COUNT_VARIANTS
相关的:

在标准SQL中,包含GROUP BY子句的查询不能引用select列表中未在GROUP BY子句中命名的未聚合列