2017-10-14 4 views
0

두 테이블이 있습니다 : inviteesinvitee_information입니다. 초대받은 사람은 events에 속합니다 (세 번째 테이블 event_id는 invitees 테이블의 외래 키입니다).왼쪽 조인에 group by를 사용하면 IN은 빈 결과를 산출합니다.

아직 사용할 수있는 정보가없는 이벤트 당 초대 수를 얻고 싶습니다 (invitee_information 테이블에 레코드 없음).

I WHERE 절 안티 가입 주어진 EVENT_ID 예상대로 카운트가 반환된다 (invitee_id 열이 어떠한 정보도 저장되지 갖는 행을 필터링하는 NULL IS) 패턴에 하나만 event_id를 사용하여 쿼리 작성시 :

SELECT COUNT(i.id) 
FROM invitees i 
LEFT JOIN invitee_information ii 
ON ii.invitee_id = i.id 
WHERE ii.invitee_id IS NULL AND i.`event_id` = 18571 AND i.`invitation_sent` = 1; 

이제는 각 event_id에 대한 루프에서이를 얻지 않고이 이벤트 데이터를 여러 개의 event_ids에 대해 DB 수준에서 얻으려면 IN을 사용하고 여러 개의 event_ids를 전달하고 GROUP_BY event_id을 사용했습니다.

예상 결과해야 할 (EVENT_ID의 18569에 대한 invitee_information 테이블에 저장된 데이터가없는 경우 :.

event_id | count(i.id) 
18569 |   0 

그러나 쿼리 결과는 항상 비어있는 내 업데이트 쿼리는 다음과 같습니다

SELECT i.`event_id`, COUNT(i.id) 
FROM invitees i 
LEFT JOIN invitee_information ii 
ON i.id = ii.invitee_id 
WHERE ii.invitee_id IS NULL AND i.`event_id` IN(18569,18571) AND i.`invitation_sent` = 1 
GROUP BY i.`event_id`; 

답변

0

만 이 문제는 상상할 수 있습니다. ,은 소수점을 의미하는 국제화 설정이있는 경우입니다.

SELECT i.`event_id`, COUNT(i.id) 
FROM invitees i LEFT JOIN 
    invitee_information ii 
    ON i.id = ii.invitee_id 
WHERE ii.invitee_id IS NULL AND 
     (i.`event_id` = 18569 OR i.`event_id` = 18571) AND 
     i.`invitation_sent` = 1 
GROUP BY i.`event_id`; 

이 방법이 작동하면 적어도 문제를 확인했습니다. 나는 공간이 다음 작동 생각 :

SELECT i.`event_id`, COUNT(i.id) 
FROM invitees i LEFT JOIN 
    invitee_information ii 
    ON i.id = ii.invitee_id 
WHERE ii.invitee_id IS NULL AND 
     i.`event_id` IN (18569, 18571) AND 
     i.`invitation_sent` = 1 
GROUP BY i.`event_id`; 

난 당신이 아마 SELECT보다는 COUNT(i.id)에서 COUNT(ii.invitee_id)을 원하는 있음을 알아 두셔야합니다. 후자는 결코 0을 반환하지 않습니다.

편집 :

는 아마도 두 이벤트invitees 테이블에 있지 않습니다. 이벤트 테이블이 있다고 가정하면 다음과 같은 메시지가 표시됩니다.

SELECT e.event_id, COUNT(i.id) 
FROM events e LEFT JOIN 
    invitees i 
    ON i.event_id = e.event_id AND 
     i.invitation_sent = 1 LEFT JOIN 
    invitee_information ii 
    ON i.id = ii.invitee_id 
WHERE ii.invitee_id IS NULL AND 
     e.event_id IN (18569, 18571) AND 
GROUP BY e.event_id; 
+0

감사합니다. 아니요, 두 쿼리 모두 빈 결과를 나타냅니다. 또한 단일 event_id 만 사용하는 첫 번째 쿼리에서 항상 0을 반환 할 수 있습니까? –

+0

아직 제공되는 정보가없는 모든 초대 대상자를 계산하기 때문에 invitees.id를 계산합니다. 제공된 정보가 없다는 것은 invitee_id가 foreign 키인'invitee_information' 테이블에 레코드가 없음을 의미합니다. –

+0

@AliMalik. . . 두 피초 사인 모두가 '피초청자'에 있지 않은 문제인가? 그것은 내가 당신의 질문을 이해하는 방법이 아니지만, 당신이 묻고 자하는 것일 수 있습니다. –

관련 문제