2011-11-28 131 views
7

這裏有兩個表:如何根據另一個表中的值刪除一個表中的記錄?

table1的

cm_id cost 
1  6.52 
2  16.52 
3  2.12 
4  7.14 
5  19.09 
6  11.52 
7  0.12 

table2中

um_id order_num name 
1  517   tommy 
2  518   bobby 
3  519   scotty 
4  520   faris 
5  521   justine 
6  522   sadie 
7  523   nicole 

CM_ID和um_id表示相同的事情,所以成本可綁每個訂單數量,即

SELECT table1.cm_id, table1.cost, table2.order_num, table2.order_num 
FROM table1, table2 
WHERE table1.cm_id=table2.um_id; 

什麼是我可以用來刪除行的單個SQL語句來自table1,其中table2中的order_num在518和520之間?

+2

我相信這應該[回答你的問題(http://stackoverflow.com/questions/439750/t-sql-selecting-rows-to-delete-via-連接)。只需使用連接。 – Ryan

+0

感謝您的參考,我有很多學習要做! – user784637

+0

Duplicates http://stackoverflow.com/questions/1590799/delete-all-rows-in-a-table-based-on-another-table – Igor

回答

15
delete 
from table1 
where cm_id IN (select um_id from table2 where order_num between 518 and 520) 
+4

對大量數據無效 –

+0

爲什麼不能?什麼是有效的?有另一種方法嗎? – bornfromanegg

1

使用子查詢使用DELETE:

DELETE * FROM table1 WHERE table1.cm_id IN (SELECT table2.um_id FROM table2 WHERE order_num>=518 and order_num<=520) 
+0

DELETE FROM NOT DELETE * FROM – Cristiana214

7
DELETE table1 
FROM table1 INNER JOIN table2 ON table1.cm_id = table2.um_id 
AND (table2.order_num BETWEEN 518 AND 520) 

--OR 

DELETE 
FROM table1 
USING table1 INNER JOIN table2 ON table1.cm_id = table2.um_id 
WHERE (table2.order_num BETWEEN 518 AND 520) 

編輯:

存在重複FROM和查詢已被更改爲每Andriy M意見。

+0

這將在SQL Server中起作用。 [在MySQL](http://dev.mysql.com/doc/refman/5.0/en/delete.html「MySQL :: MySQL 5.0參考手冊:: 12.2.2 DELETE語法」),您應該* a)*刪除第一個'FROM'或* b)*用'USING'替換第二個'FROM'。 –

+0

另外,這兩個查詢又有什麼不同? (我的意思是,除了第二個包含更少的空間這一事實外) –

+0

哦,其實我忘了把WHERE子句放到第二個查詢中,我相應地改變了,謝謝 –

3

我更喜歡這種方式

delete from table1 
using table1, table2 
where table1.cm_id = table2.um_id 
and table2.order_num >= 518 
and table2.order_num <= 520; 
相關問題