Sql 错误:ORA-00923:未在预期位置找到FROM关键字

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

我试图从一个带有记录计数的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 
    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统计表中的所有记录,并获取有限的记录。