我的查询如下:
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列
答案 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 ;
也就是说,假设不将表STATION
和PAYEMENT
用于过滤,则此查询不需要。 NUM_STATION
列在HOTEL
中应该正确-对于任何明智的数据模型。 PAYEMENT
表可以用于过滤;如果那是意图,那么它应该留在里面。