2017-03-24 66 views
1

我正在创建客户有多个预留的实例。要做到这一点,每次客户号码在预订表中列出不止一次,这表示他们有多个预留(同样是条件)。不幸的是,当我试图运行这个查询时,我得到:遇到SQL错误1111问题

错误代码:1111(组函数无效使用)。

这是我在下面做的。

SELECT FirstName, LastName, tripName 
FROM reservation, customer, trip 
WHERE reservation.CustomerNum = customer.CustomerNum 
AND reservation.TripID = trip.TripID 
AND COUNT(reservation.CustomerNum) > 1 
GROUP BY reservation.CustomerNum; 

我对SQL很新,任何建议都会非常有帮助。

+0

这里检查答案:http://stackoverflow.com/questions/22141968/error-code-1111-invalid-use-of-group -功能。基本上你需要把你的计数移到有条件的地方。 –

回答

0

如果您使用GROUP BY,则您选择的所有字段必须位于聚合函数中或包含在GROUP BY子句中。

0

您需要正确编写连接,使用别名有助于保持的东西可读,并节省您额外的按键,你需要使用像这样来限制你的结果,那些拥有不止一个预约:

select FirstName, LastName, tripName 
from customer c 
    inner join reservation r 
    on c.CustomerNum = r.CustomerNum 
    inner join trip t 
    on r.TripID = t.TripID 
where c.CustomerNum in (
    select ir.CustomerNum 
    from reservation ir 
    group by ir.CustomerNum 
    having count(*) > 1 
) 
+0

谢谢。我不知道'HAVING'这个关键字。非常有帮助,我会开始习惯使用正确的连接和别名。 –

+0

@AlexKennedy乐于助人! – SqlZim

0

必须使用具有过滤器的聚合结果(不到哪)

SELECT FirstName, LastName, tripName 
    FROM reservation 
    INNER JOIN customer on reservation.CustomerNum = customer.CustomerNum 
    INNER JOIN trip on reservation.TripID = trip.TripID 
    GROUP BY reservation.CustomerNum; 
    having COUNT(reservation.CustomerNum) > 1