2014-03-06 88 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)