0

まとめるのに少し複雑なクエリを書く必要があります。基本的な考え方は、異なるテーブルのいくつかのフィールドを照合し、その結果に基づいて別のテーブルを編集することです。

関連するテーブルは3つあります。

スケジュール:sch_id, date, schedule, event_id

Link_Location_Schedules:id, loc_id, sch_id

Link_Location_Events:id, loc_id, event_id

今私が試してみる必要があるのは:

  1. 「スケジュール」で今日の日付以降に設定されたスケジュールを検索します。
  2. これらのスケジュールでは、スケジュールイベントIDと等しいLink_Location_Events場所からロケーションIDを取得します。event_ids
  3. 一致したスケジュール(sch_id)と返された場所(loc_id)のそれぞれについて、ペアがすでにに存在するかどうかを確認し、存在しLink_Location_Schedulesない場合は挿入します。

これが私が上記のために行ったいくつかのSQLクエリです、私はそれらをいくつかの方法で組み合わせる必要があります:

  1. SELECT sch_id FROM 'Schedules' WHERE DATE_FORMAT(sports_schedule_insert_date_time, "%Y-%m-%d") >= '2012-11-14';

  2. SELECT loc_id from Link_Location_Events, Schedules WHERE Link_Location_Events.event_id = Schedules.event_id;

4

1 に答える 1

0

selectステートメントからの単純な挿入のように聞こえます...

insert into Link_Location_Schedules
   ( loc_id,
     sch_id )
select
      PreQuery.loc_id,
      PreQuery.sch_id
   from
      ( select
              s.sch_id,
              lle.loc_id
           from
              Schedules s
                 join Link_Location_Events lle
                    on s.event_id = lle.event_id ) PreQuery
      LEFT JOIN Link_Location_Schedules lls
         on PreQuery.loc_id = lls.loc_id
        and PreQuery.sch_id = lls.sch_id
   where
      lls.loc_id is null

最も内側の事前クエリは、すべての可能なスケジュール/ロケーションIDを取得することです。そこから、見つかったものの既存の場所/スケジュールに左結合します。次に、WHERE句は、一致が見つからなかったもののみを返します(したがって、lls.loc_idはnullです)。その結果を取得し、スケジュール/場所のテーブルに直接挿入します。

于 2012-11-14T13:03:48.300 に答える