2017-05-31 8 views
0

データベースの "コース"テーブルに挿入されるものを決定するIf/Thenステートメントを設定しようとしています。MySQL - IF/THENステートメントがINSERT INTOを決定する

If @courseprogram = 'PharmTech' Then 
    INSERT INTO course (fameid, course_id, enroll_status) 
    SELECT @fameid fame_id, course_id, 'S' enroll_status FROM calendar 
    WHERE startdate >= @startdate AND program = @courseprogram ORDER BY startdate LIMIT 6; 
Elseif @fullprogram = 'Medical Assisting' 
    INSERT INTO course (fameid, course_id, enroll_status) 
    SELECT @fameid fame_id, course_id, 'S' enroll_status FROM calendar 
    WHERE startdate >= @startdate AND program = @courseprogram ORDER BY startdate LIMIT 7; 
End if 

私はこれを実行しようとすると、私は次のエラーメッセージが表示されます:最初のINSERT INTOは、ここ7

から6行への挿入、および第二の限界、それはコードは次のようになります制限します:

エラーコード:1064. SQL構文にエラーがあります。 PharmTech行で1

誰もい「するとfameid、Course_IDに、ENRは( もちろん。INSERT INTO 『』 @courseprogram =が」が近くで使用する権利 構文についてはMySQLサーバのバージョンに対応 マニュアルをご確認ください

また、私は、この問題を回避するために、IF/THEN文をすべて一緒に避けるべきであることを、いくつかの記事で読んだことがあります。問題はありますか?

+0

「IF」文は、プログラミングブロック(ストアドプロシージャ、トリガ、関数)でのみ許可されている制御フロー構造です。 –

答えて

1

ええと。これは単一の統計情報でこれを行う1つの方法ですement:

INSERT INTO course (fameid, course_id, enroll_status) 
    (SELECT @fameid as fame_id, course_id, 'S' as enroll_status 
    FROM calendar 
    WHERE @courseprogram = 'PharmTech' AND 
      startdate >= @startdate AND 
      program = @courseprogram 
    ORDER BY startdate 
    LIMIT 6 
    ) UNION ALL 
    (SELECT @fameid as fame_id, course_id, 'S' as enroll_status 
    FROM calendar 
    WHERE @fullprogram = 'Medical Assisting' AND 
      startdate >= @startdate AND 
      program = @courseprogram 
    ORDER BY startdate 
    LIMIT 7 
    ); 

私は、これはエレガントであることを主張していませんよ。単にそれがあなたの問題を解決するだけです。

注:2番目のサブクエリの条件@fullprogram = 'Medical Assisting'は、実際には@courseprogram = 'Medical Assisting'であると推測しています。

関連する問題