>source

이주의 날짜와 total_price 의 합계를 얻고 싶습니다  심지어 특정 날짜에 거래가 없습니다. 문제는 tbl_barangay.city_id 의 가치를 바꿀 때입니다.   2 로 , tbl_barangay.city_id = 1 의 모든 데이터  포함되어 있습니다. tbl_barangay.city_id 의 가치에 따라 모든 기록을 얻고 싶습니다. . 예상 데이터를 얻을 수 있도록 두 개 이상의 테이블을 조인하는 방법은 무엇입니까?

샘플 데이터

    tbl_calendar tbl_city tbl_tran
date_id 날짜 city_id city_name tran_id tran_date city_id
1 2019-08-19 1 살라 1 2019-08-19 1
2 2019-08-20 2 Marinig 2 2019-08-20 1
3 2019-08-21 3 폴로 3 2019-08-23 2
4 2019-08-22
5 2019-08-23
6 2019-08-24
7 2019-08-25

         tbl_tran_details
detail_id 항목 total_price tran_id
1 항목 1 20 1
2 품목 2 20 1
2 항목 3 30 2
2 품목 1 30 3

tbl_city.city_id = 1 인 경우 예상되는 데이터

날짜 합계
2019-08-19 40
2019-08-20 30
2019-08-21 0
2019-08-22 0
2019-08-23 0
2019-08-24 0

그리고 tbl_city.city_id = 2  

날짜 합계
2019-08-19 0
2019-08-20 0
2019-08-21 0
2019-08-22 0
2019-08-23 30
2019-08-24 0

 SELECT tbl_calendar.date Date, 
  SUM(IFNULL(tbl_tran_details.total_price,0)) Total FROM tbl_calendar
  LEFT JOIN 
  tbl_tran ON tbl_calendar.date = tbl_tran.tran_date
  LEFT JOIN 
  tbl_tran_details ON tbl_tran.tran_id = tbl_tran_details.tran_id
  LEFT JOIN 
  tbl_city ON tbl_tran.city_id = tbl_city.city_id AND tbl_city.city_id = 2
  WHERE 
  YEAR(tbl_calendar.date) = YEAR(NOW())
  AND
  WEEK(tbl_calendar.date) = WEEK(NOW())
  GROUP BY
  tbl_calendar.date

  • 답변 # 1

    문제는 tbl_tran 에서 특정 도시에 대한 거래 합계를 얻으려고하기 때문에 잘못된 테이블에서 도시를 필터링한다는 것입니다  테이블,하지만 당신은 tbl_city 에서 도시를 필터링  -이 검색어에도 사용하지 않습니다.

    ...
    FROM (tbl_calendar
      LEFT JOIN 
      tbl_tran ON tbl_calendar.date = tbl_tran.tran_date AND tbl_tran.city_id = 2)
      LEFT JOIN 
      tbl_tran_details ON tbl_tran.tran_id = tbl_tran_details.tran_id
    ...
    
    

  • 이전 excel - 열 값을 기준으로 행 채우기
  • 다음 regex - TextMate의 HTML IMG 문자열에서 파일 이름의 일부를 제거하려면 어떻게해야합니까?