2012-08-16 32 views
1

我有這樣的查詢:重用選擇結果在同一查詢

DELETE FROM rules_table 
WHERE 
    type1 = (
     SELECT type_id 
     FROM types_table 
     WHERE name = '<some_name>') 
OR 
    type2 = (
     SELECT type_id 
     FROM types_table 
     WHERE name = '<some_name>') 

請注意,<some_name>在兩個相同的出現

我從PHP腳本提交查詢和我」 d更喜歡它是單個請求,而不是用一個請求選擇type_is,解析結果並提交刪除請求。

而且據我所知,兩次運行相同的SELECT聲明也是一個壞主意。

回答

2

嘗試

DELETE FROM rules_table 
WHERE (
     SELECT type_id 
     FROM types_table 
     WHERE name = '<some_name>' 
     ) in (type1, type2) 
+0

哇,這是快。謝謝,這個答案讓我有一天。 – Uko 2012-08-16 07:18:50

2

,而不是subquery您可以使用INNER JOIN

DELETE a 
FROM rules_table a 
    INNER JOIN types_table b 
     ON (a.type1 = b.type_id OR a.type2 = b.type_id) 
WHERE b.name = '<some_name>'; 
+0

它不會從types_table中刪除行嗎? – Uko 2012-08-16 07:18:04

+0

不,它只會從表'rules_table a'中刪除記錄,因爲我們已給它一個別名'DELETE a'。 – Omesh 2012-08-16 07:21:02

+0

哦,是的,我沒有注意到:) – Uko 2012-08-16 07:23:01