2012-11-02 46 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) 
    ); 

请注意,这是未经测试的。

相关问题