0

基本的に次のようなクエリを実行しようとしています。

INSERT INTO lessons_skills_xref (lessons_id, skills_id)
SELECT id FROM lessons, (SELECT id FROM skills WHERE title = "title 1")
/* PSEUDO CODE - Where the ids for both lesson and skill don't already exist */

最後の部分を達成する方法がわからない。何か案は?

4

3 に答える 3

4

lessons_skills_xref(lessons_id、skills_id)に一意のキーがあると仮定すると、簡単な方法は単に使用することですINSERT IGNORE

INSERT IGNORE INTO lessons_skills_xref (lessons_id, skills_id)
SELECT id, (SELECT id FROM skills WHERE title = "title 1") FROM lessons

構文は、レコードがまだ存在しない場合は挿入し、INSERT IGNORE既に存在する場合は無視します。

于 2012-11-02T19:43:10.163 に答える
0

「タイトル 1」スキルのすべての lesson.id と skills.id の間にデカルト結合を生成しようとしていますか? SELECT 句が機能するかどうかわかりません。これは次の可能性があります。

    INSERT INTO lessons_skills_xref (lessons_id, skills_id)
    (SELECT l.id, s.id FROM lessons l, skills s 
        WHERE s.title = "title 1"
        AND NOT EXISTS 
            (SELECT * FROM lessons_skills_xref 
                WHERE lessons_id=l.id 
                AND skills_id=s.id)
    );

これはテストされていないことに注意してください。

于 2012-11-02T19:53:59.790 に答える
0
INSERT INTO lessons_skills_xref (lessons_id, skills_id)

SELECT lessons.id, skills.id FROM lessons
inner join skills on <join criteria here>

where not exists (select 1 from lessons_skill_xref x where
                  x.lessons_id = lessons.id and x.skills_id = skills.id)

and skills.title = "title 1"
于 2012-11-02T19:40:21.373 に答える