我收到错误ORA-00979,但无法修复

时间:2019-01-05 22:11:02

标签: sql oracle

我的查询如下:

SELECT 
    s.NUM_STATION, extract(year from r.DATER), cl.NB_RESERV
FROM 
    STATION s, HOTEL h, CHAMBRE c, RESERVATION r, CLIENTS cl, PAYEMENT p 
WHERE 
    s.NUM_STATION = h.NUM_STATION 
    AND h.NUM_HOTEL = c.NUM_HOTEL 
    AND c.IDCHAMBRE = r.IDCHAMBRE 
    AND r.NUMC = cl.NUMC 
    AND cl.NUMC = p.NUMC
GROUP BY 
    s.NUM_STATION;  

我收到以下错误:

  

ORA-00979:不是GROUP BY表达式
  00979. 00000-“不是GROUP BY表达式”
  *原因:
  *操作:第48行错误:41列

2 个答案:

答案 0 :(得分:3)

每个非聚合列都必须出现在GROUP BY子句中。

但是您的查询未使用聚合函数,因此我认为您想要SELECT DISTINCT

这是您的查询更新(也使用显式JOIN而不是old-style joins):

SELECT DISTINCT
    s.NUM_STATION,
    extract (year from r.DATER),
    cl.NB_RESERV
FROM 
    STATION s
    INNER JOIN HOTEL h       ON s.NUM_STATION=h.NUM_STATION 
    INNER JOIN CHAMBRE c     ON h.NUM_HOTEL=c.NUM_HOTEL
    INNER JOIN RESERVATION r ON c.IDCHAMBRE=r.IDCHAMBRE
    INNER JOIN CLIENTS cl    ON r.NUMC=cl.NUMC
    INNER JOIN PAYEMENT p    ON cl.NUMC=p.NUMC

答案 1 :(得分:0)

您可以将查询简化为:

SELECT DISTINCT h.NUM_STATION, extract(year from r.DATER), cl.NB_RESERV
FROM HOTEL h JOIN
     CHAMBRE c
     h.NUM_HOTEL = c.NUM_HOTEL JOIN
     RESERVATION r
     ON c.IDCHAMBRE = r.IDCHAMBRE JOIN
     CLIENTS cl
     ON r.NUMC = cl.NUMC ;

也就是说,假设不将表STATIONPAYEMENT用于过滤,则此查询不需要。 NUM_STATION列在HOTEL中应该正确-对于任何明智的数据模型。 PAYEMENT可以用于过滤;如果那是意图,那么它应该留在里面。