2013-06-11 4 views
1

MDW_CUSTOMER_ACCOUNTS의 필드는 ACCOUNT_ID, MEAL_ID입니다.데이터베이스에서 사용하지 않는 항목을 나열하는 방법

MDW_MEALS_MENU의 필드는 다음과 같습니다. MEAL_ID, MEAL_NAME.

내가 특정 식사 쿼리를 사용하여 고객이 가입 된 횟수에 대한 보고서를 생성하기 위해 노력하고,

SELECT count(a.account_id), b.meal_id, b.meal_name 
    FROM mdw_meals_menu b LEFT JOIN mdw_customer_accounts a 
    on b.meal_id=a.meal_id 
    WHERE 
    a.start_date BETWEEN to_date('01-APR-2013','DD-MON-YYYY') 
    AND to_date('30-JUN-2013','DD-MON-YYYY') 
    GROUP BY b.meal_id, b.meal_name 
    ORDER BY count(a.account_id) desc, b.meal_id; 

이 단지리스트에 등록 된 MEAL_ID의 이상 일단. 하지만 구독하지 않은 ID는 표시하지 않습니다.

MEAL_ID 수를 0으로 인쇄하려면 어떻게해야합니까?

코드를 수정했지만 여전히 동일한 결과를 얻습니다.

+6

가입 왼쪽 ..... –

+0

@MitchWheat 왼쪽 조인을 사용해 보았지만 나에게 도움이되지 못했습니다 ... – debal

+0

SQL 쿼리의 잘못된 쿼리 : http://sqlfiddle.com/#!4/f2416/2/0 – jpmc26

답변

4

당신의 절 효과적으로 바깥을 돌고 다시 내부에 조인 - 외부 조인 테이블에 조건은 일반적과 같이, 조인 절에 있어야합니다 :

SELECT count(a.account_id), b.meal_id, b.meal_name 
FROM mdw_meals_menu b 
LEFT JOIN mdw_customer_accounts a 
     on b.meal_id=a.meal_id and 
      a.start_date BETWEEN to_date('01-APR-2013','DD-MON-YYYY') 
          AND to_date('30-JUN-2013','DD-MON-YYYY') 
GROUP BY b.meal_id, b.meal_name 
ORDER BY count(a.account_id) desc, b.meal_id; 
+0

+1이 너무 빠르다. :-) –

+1

모든 시간을 지내면서 모든 사람들을위한 SQL Fiddle : http://sqlfiddle.com/#!4/f2416/1/0 – jpmc26

1

왼쪽 외부 조인을 사용해야합니다.

+0

OP가 이미 있습니다. 왼쪽 외부 조인 사용 (LEFT JOIN == LEFT OUTER JOIN) –

+2

두 번째 편집 전에 원래 질문을 확인하십시오.이 질문은 처음에는 OUTN JOIN을 표시하도록 편집 된 암시 적 INNER JOIN이 포함 된 쿼리를 보여주었습니다. 이 답변은 원래의 질문에 답을하지만 (세부 사항이 많지는 않지만), 나는 그것이 downvote의 가치가 있다고 생각하지 않습니다. – GarethD

+0

@GarethD - 그것을 지적 해 주셔서 감사합니다 - downvote가 취소되었습니다. –

관련 문제