2012-01-31 28 views
1

我有一個MySQL DATABSE三個表是這樣的:SQL-刪除

orders: order_sequence_number, contact_id, date_ordered ... 

orderdetail: order_sequence_number ... 

person: contact_id ... 

我試圖刪除跨有date_ordered值比舊的三個表中的所有行然而,兩年之後,date_ordered字段僅出現在orders表中,但該表通過order_sequence_number和contact_id字段鏈接到其他兩個字段。

所以,我會像有點像這樣:...

SELECT * FROM orders WHERE date_ordered BETWEEN X AND Y 

則與該記錄集

DELETE FROM orderdetail WHERE orderdetail.order_sequence_number IN (THE ABOVE) 

等,爲個人表...但沒有運氣。

在我看來,像某種嵌套子查詢的,但我有困難,瞭解如何做這樣的查詢,並不能讓我圍繞它的繁複,頭...

任何指針將是非常讚賞。

回答

5
DELETE FROM orderdetail 
WHERE order_sequence_number IN 
(
    SELECT id 
    FROM orders 
    WHERE date_ordered BETWEEN X AND Y 
) 
2

這就是幾乎你寫的:

DELETE FROM orderdetail WHERE orderdetail.order_sequence_number IN (
    SELECT distinct(order_sequence_number) FROM orders WHERE date_ordered BETWEEN X AND Y 
) 
1

如果你有一個大表orders,最好使用EXISTS

DELETE FROM orderdetail od 
WHERE EXISTS (SELECT NULL 
       FROM orders o 
       WHERE date_ordered BETWEEN X AND Y 
       and od.order_sequence_number = o.order_sequence_number 
      )