2014-03-06 84 views
3

我有一条SQL语句从我的数据库中提取符合条件的记录。将SQL Select *语句转换为删除语句

SELECT * FROM `t_questions` LEFT JOIN `t_syllabus` ON `t_syllabus`.`syllabus_id` = `t_questions`.`question_syl_reference_id` WHERE `t_syllabus`.`syllabus_training_block` = 'CPL'; 

这工作正常,并返回我想要的一切。

我现在需要写一个状态来删除使用相同条件的问题。

到目前为止,我试过这个,但是我得到一个错误。

DELETE FROM t_questions WHERE question_id IN(SELECT * FROM `t_questions` LEFT JOIN `t_syllabus` ON `t_syllabus`.`syllabus_id` = `t_questions`.`question_syl_reference_id` WHERE `t_syllabus`.`syllabus_training_block` = 'CPL') 

我手边没有错误消息,但稍后会更新。

任何想法,为什么这不工作?

谢谢。

+3

“question_id IN(SELECT * FROM”您选择多个值,并将其与针对单个列( question_id) 做一个关于question_id的选择,它应该可以工作 (SELECT question_id FROM ..) – Vivek

+0

@用户欢迎来到SO,一定要检查一个你喜欢的答案,并注意那些帮助你的答案! – paqogomez

回答

3

尝试在你的子选择这个

DELETE FROM t_questions 
WHERE question_id IN 
       (SELECT question_id 
       FROM `t_questions`.`t_questions` LEFT JOIN `t_syllabus` ON `t_syllabus`.`syllabus_id` = `t_questions`.`question_syl_reference_id` 
       WHERE `t_syllabus`.`syllabus_training_block` = 'CPL') 
1

正如其他人所指出的,您选择多个值。

您可能有兴趣在这里做一个存在。存在疑问常常更好的优化,因此比更快

它看起来是这样的:

DELETE FROM t_questions as t_outer 
WHERE exists 
       (SELECT 1 
       FROM `t_questions`.`t_questions` as t_inner 
       LEFT JOIN `t_syllabus` ON `t_syllabus`.`syllabus_id` = `t_questions`.`question_syl_reference_id` 
       WHERE `t_syllabus`.`syllabus_training_block` = 'CPL' 
       AND t_inner.question_id = t_outer.question_id)