2017-12-01 10 views
1

연도, 참석자 수 및 location 테이블에서 위치를 조회하는 위치가 포함 된 테이블이 events입니다.중첩 된 루프로 누락 된 값 삽입

tbl_events

+-----+--------------+------+-----------+--------+ 
| ID | LOCATION_ID | YEAR | ATTENDEES | RATING | 
+-----+--------------+------+-----------+--------+ 
| 1 | 1   | 2014 | 44  | 6  | 
| 2 | 2   | 2014 | 36  | 7  | 
| 3 | 4   | 2014 | 51  | 7  | 
| ... | ...   | ... | ...  | ... | 
| 74 | 2   | 2015 | 59  | 6.5 | 
| 75 | 4   | 2015 | 31  | 5  | 
| 76 | 12   | 2015 | 66  | 8  | 
| ... | ...   | ... | ...  | ... | 
| 133 | 5   | 2016 | 71  | 8.5 | 
| 134 | 32   | 2016 | 68  | 6.5 | 
| 135 | 14   | 2016 | 59  | 7.5 | 
| ... | ...   | ... | ...  | ... | 
+-----+--------------+------+-----------+--------+ 

tbl_locations

+-----+-------------+ 
| ID | Name  | 
+-----+-------------+ 
| 1 | Falmouth | 
| 2 | Plymouth | 
| 3 | Exeter  | 
| 4 | Bristol  | 
| 5 | Bournemouth | 
| 6 | Southampton | 
| ... | ...   | 
| 99 | Edinburgh | 
| 100 | Glasgow  | 
+-----+-------------+ 

난 단지 년, 위치, 참석자 및 평가의 필요한 정보를 포함하는 일어난 사건의 기록을 가지고있다.

누락 된 값의 행을 추가하여 테이블의 모든 연도에 대해 locations 테이블의 모든 위치를 포함하고 싶습니다.

그래서 나는 (매년) location 테이블의 모든 위치를 반복하면서 매년 테이블을 통과하는 루프를 중첩하여 누락 된 행을 events 테이블에 직접 삽입해야한다고 생각합니다. 임시 테이블에 넣은 후 이벤트 테이블에 삽입 할 수 있습니다.

나는 이벤트와 위치 테이블을 수십 년 동안 합치고 임시 테이블에 삽입하는 방법을 생각했다. 그런 다음 이벤트 테이블에없는 모든 행을 이벤트 테이블에 삽입하십시오.

다른 아이디어는 환영하지만 MySQL에서만이 작업을 수행 할 수 있습니다.

이상적으로는 프로 시저로 저장하고 나중에 다시 실행할 수 있습니다.

+0

** 내가 누락 된 값의 행을 추가하고 싶습니다 : 그들, 그냥 당신이 이벤트가 누락 된 슬롯 null의 (또는 다른 사용자 정의 값)으로 행을 얻을 수 있도록 실제 사건에 그들과 합류 왼쪽 테이블에있는 모든 연도에 대한 위치 테이블의 모든 위치를 포함 시키십시오. **이 문장으로 더 명확하게 나타낼 수 있습니까? –

+1

매년 모든 이벤트가 방문되는 것은 아닙니다. 하지만 여전히 테이블에 행이 있기를 원하므로 ID, location_id, 년, 참석자 및 등급에 NULL이 표시됩니다. – n8udd

답변

0

전체 조합을 얻으려면 위치와 모든 연도를 cross join 수 있습니다.

SELECT  e.* 
FROM  tbl_locations l 
CROSS JOIN (SELECT DISTINCT year FROM events) y 
LEFT JOIN events e ON l.id = e.location_id AND y.year = e.year