2012-12-18 48 views
1

我有兩個相互關聯的表,我想只從一個表中刪除記錄。表結構如下MySQL僅刪除單個表中的記錄

Table : Users 
userunique, active, unSubscribed 

Table : userBilling 
userunique, billCreatedDate,billstatus 

我想刪除那些不再活躍的用戶帳單,如下所示。

billcreateddate < 2011-12-30 
billstatus=2 //pending 

active='0' 
unSubscribed<'2011-12-30' 

我寫了一個查詢,但它不是我所期望的。我想只刪除用戶帳單表中的記錄,而不是用戶表

select * from userBilling ubill, Users user 
WHERE ubilll.userUnique=user.userUnique 
AND ubill.billCreatedDate<'2011-12-30' 
AND ubill.billstatus = '2' 
AND ((user.active = '0') AND (user.unsubscribed>'2011-01-01') 
AND user.unSubscribed<'2011-12-30')) 

但我猜上面的查詢包含兩個表的結果。請建議!

感謝,

+0

上面的查詢'DELETE's什麼,它只是'SELECT's。 –

+0

你有在這個查詢中返回'billingid'字段嗎?這個查詢是否給你想要刪除的記錄? – jamis0n

+0

假設你的查詢條件沒問題(並且你正在使用'select'只是爲了在調用'delete'之前搜索這些值),你是否檢查過你的表中是否有一些外鍵約束? – Cynical

回答

3
DELETE a 
FROM userBilling a 
     INNER JOIN users b 
      ON a.auserUnique = b.userUnique 
WHERE billcreateddate < 2011-12-30 OR 
     billstatus = 2 OR 
     active = 0 OR 
     unSubscribed < '2011-12-30' 

如果你希望所有的條件是真正,改變ORAND

1

這應該工作。你應該總是讓你的連接明確。這樣你就不會感到驚訝。

DELETE ubill 
FROM userBilling ubill 
    JOIN Users u 
    ON (ubill.userUnique=u.userUnique) 
WHERE ubill.billCreatedDate<'2011-12-30' 
    AND ubill.billstatus = '2' 
    AND ((u.active = '0') AND (u.unsubscribed>'2011-01-01') 
    AND u.unSubscribed<'2011-12-30')) 
+0

它給了我錯誤,說:「列'ubill'在字段列表不明確」 –

+0

@MadanMadan:嘗試'DELETE ubill。* ...'。它應該沒有什麼區別,但是,就我所知,這種錯誤不應該發生。 – dnagirl

+0

此查詢不適用於SELECT,不是嗎?它只適用於DELETE也可以在此查詢中使用限制嗎? –

0

嘗試做到這一點

 DELETE ubill 
     FROM userBilling ubill 
    INNER JOIN Users 
    ON ubill.userUnique=user.userUnique 
     WHERE 
     ubill.billCreatedDate<'2011-12-30' 
     AND ubill.billstatus = '2' 
     AND user.active = '0' 
     AND user.unsubscribed>'2011-01-01' 
     AND user.unSubscribed<'2011-12-30'