2017-12-01 7 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 S(または他のいくつかのカスタム値)を持つ行を取得するので、それらは、ちょうど左のイベントが不足しているスロットに実際のイベントにそれらを結合しますテーブルのすべての年のロケーションテーブルのすべての場所を含めるようにしてください。**この文でより明確にすることができますか? –

+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 
関連する問題