2017-03-24 6 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를 -기능. 기본적으로 당신은 카운트를 having 절로 옮길 필요가 있습니다. –

답변

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