Sql 错误:ORA-00923:未在预期位置找到FROM关键字
我试图从一个带有记录计数的oracle sql表中获取数据。我试着跟着Sql 错误:ORA-00923:未在预期位置找到FROM关键字,sql,oracle,Sql,Oracle,我试图从一个带有记录计数的oracle sql表中获取数据。我试着跟着 SELECT *, (COUNT(BRAND_ID) AS TOTAL) FROM ( SELECT BRAND_ID, BRAND_CODE, BRAND_TITLE FROM BRAND WHERE ACTIVE = '1' ORDER BY BRAND_TITLE ASC
SELECT *,
(COUNT(BRAND_ID) AS TOTAL)
FROM
(
SELECT BRAND_ID,
BRAND_CODE,
BRAND_TITLE
FROM BRAND
WHERE ACTIVE = '1'
ORDER BY BRAND_TITLE ASC
OFFSET 10 ROWS
FETCH NEXT 10 ROWS ONLY
) BRAND
LEFT JOIN
((
SELECT PRODUCT_ID,
PRODUCT_SKU_ID,
PRODUCT_WEB_ID,
PRODUCT_TITLE,
PRODUCT_SALES_PRICE,
PRODUCT_REGULAR_PRICE,
PRODUCT_RATING
FROM PRODUCT
WHERE
(
PRODUCT_TYPE='B'
OR PRODUCT_TYPE='R'
)
AND AVAILABILITY='1'
) PRDUCT ) ON BRAND.BRAND_CODE= PRDUCT.BRAND_CODE
当我执行此操作时,出现以下错误
错误:ORA-00923:未在预期位置找到FROM关键字
我怎样才能解决这个问题
提前谢谢 我想您应该从第一行的
select语句中删除*
。试试下面这个
SELECT (COUNT(BRAND_ID) AS TOTAL)
FROM
(
SELECT BRAND_ID,
BRAND_CODE,
BRAND_TITLE
FROM BRAND
WHERE ACTIVE = '1'
ORDER BY BRAND_TITLE ASC
OFFSET 10 ROWS
FETCH NEXT 10 ROWS ONLY
) BRAND
LEFT JOIN
((
SELECT PRODUCT_ID,
PRODUCT_SKU_ID,
PRODUCT_WEB_ID,
PRODUCT_TITLE,
PRODUCT_SALES_PRICE,
PRODUCT_REGULAR_PRICE,
PRODUCT_RATING
FROM PRODUCT
WHERE
(
PRODUCT_TYPE='B'
OR PRODUCT_TYPE='R'
)
AND AVAILABILITY='1'
) PRDUCT ) ON BRAND.BRAND_CODE= PRDUCT.BRAND_CODE
您正在select语句中使用aggreagte函数。因此,对于其他列,您不能简单地调用Select*
首先,为方便起见,您应该为所选的内部列指定一个别名
然后选择“外部选择”中的列
因为select中的一列正在使用agg函数,所以Group By应该由select中的其他列完成
为了方便起见,我给列命名为c2,c3…根据需要重命名。
如果未指定别名,您可以按指定的方式指定列
SELECT c2,c3,c4,c5,c6,c7,c8,c9,c10,
COUNT(BRAND_ID) AS TOTAL
FROM
(
SELECT BRAND_ID ,
BRAND_CODE AS c2,
BRAND_TITLE AS c3
FROM BRAND
WHERE ACTIVE = '1'
ORDER BY BRAND_TITLE ASC
OFFSET 10 ROWS
FETCH NEXT 10 ROWS ONLY
) BRAND
LEFT JOIN
((
SELECT PRODUCT_ID AS c4,
PRODUCT_SKU_ID AS c5,
PRODUCT_WEB_ID AS c6,
PRODUCT_TITLE AS c7,
PRODUCT_SALES_PRICE AS c8,
PRODUCT_REGULAR_PRICE AS c9,
PRODUCT_RATING AS c10
FROM PRODUCT
WHERE
(
PRODUCT_TYPE='B'
OR PRODUCT_TYPE='R'
)
AND AVAILABILITY='1'
) PRDUCT ) ON BRAND.BRAND_CODE= PRDUCT.BRAND_CODE
Group By c2,c3,c4,c5,c6,c7,c8,c9,c10
我没有12c,所以不能测试,但也许这就是你想要的
SELECT *
FROM
(
SELECT BRAND_ID,
BRAND_CODE,
BRAND_TITLE
FROM (select b.*,
count(brand_id) over () total
from BRAND b
WHERE ACTIVE = '1'
ORDER BY BRAND_TITLE ASC
OFFSET 10 ROWS
FETCH NEXT 10 ROWS ONLY
) BRAND
LEFT JOIN
((
SELECT PRODUCT_ID,
PRODUCT_SKU_ID,
PRODUCT_WEB_ID,
PRODUCT_TITLE,
PRODUCT_SALES_PRICE,
PRODUCT_REGULAR_PRICE,
PRODUCT_RATING
FROM PRODUCT
WHERE
(
PRODUCT_TYPE='B'
OR PRODUCT_TYPE='R'
)
AND AVAILABILITY='1'
) PRDUCT ) ON BRAND.BRAND_CODE= PRDUCT.BRAND_CODE;
在筛选行之前,它使用分析查询获取整个表中所有品牌标识的计数。我不确定您是否希望每个品牌标识的计数(count(*)超过(按品牌标识的部分)
,或者不同品牌标识的计数(count(不同品牌标识)超过()
),因此您必须使用count函数来获得您想要的结果。尝试用count替换(计数(品牌标识)为TOTAL)(BRAND_ID)作为总计,我仍然得到了错误。请指定表格。*
,使用BRAND.*,PRDUCT.*,
而不是然后我得到了错误:ORA-00937:没有一个组函数
。我尝试了BRAND.*,PRDUCT.
。这很好。但是当我使用COUNT(BRAND_ID)时作为总计,它不起作用。那么你需要选择所需的列并对这些列进行分组。你不能简单地选择*
和一个聚合函数。这对我来说很有效。但我在这里只得到10行。我需要得到BRAND
表中所有记录的总数。@codebot in t他将BRAND表的查询限制为10行。删除它并尝试这意味着如果我需要获取记录的数量,我应该删除10行限制。有没有其他方法可以在一个查询中实现这一点?@Codebot你的要求是什么?如果你需要找到所有记录的数量,你无法通过行数限制。我将用tot创建一个JSON统计表中的所有记录,并获取有限的记录。