遇到SQL错误1111问题
问题描述:
我正在创建客户有多个预留的实例。要做到这一点,每次客户号码在预订表中列出不止一次,这表示他们有多个预留(同样是条件)。不幸的是,当我试图运行这个查询时,我得到:遇到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很新,任何建议都会非常有帮助。
答
如果您使用GROUP BY,则您选择的所有字段必须位于聚合函数中或包含在GROUP BY子句中。
答
您需要正确编写连接,使用别名有助于保持的东西可读,并节省您额外的按键,你需要使用像这样来限制你的结果,那些拥有不止一个预约:
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
答
必须使用具有过滤器的聚合结果(不到哪)
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
这里检查答案:http://stackoverflow.com/questions/22141968/error-code-1111-invalid-use-of-group -功能。基本上你需要把你的计数移到有条件的地方。 –