2012-11-02 45 views
0

我想運行一個查詢,基本上是這樣的:MySQL的INSERT SELECT從多個表中,如果記錄不存在

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

假設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語法將插入記錄,如果它不存在如果它已經存在,或者忽略它。

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" 
0

您是否試圖在每個lesson.id和skills.id之間爲「title 1」技能生成笛卡爾連接?我不確定你的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) 
    ); 

請注意,這是未經測試的。

相關問題