1

互いに関連する 2 つのテーブルがあり、一方のテーブルからのみレコードを削除したいと考えています。テーブル構造は以下です

Table : Users
userunique, active, unSubscribed

Table : userBilling
userunique, billCreatedDate,billstatus

以下の条件で利用停止になったユーザーの請求書を削除したいです。

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

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

クエリを書きましたが、期待したものではありません。Users テーブルではなく、userBilling テーブルからのみレコードを削除したい

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')) 

しかし、上記のクエリには両方のテーブルの結果が含まれていると思います。提案してください!

ありがとう、

4

3 に答える 3

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'

すべての条件をtrueにする場合は、に変更ORANDます。

于 2012-12-18T15:05:51.843 に答える
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')) 
于 2012-12-18T15:06:14.667 に答える
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' 
于 2012-12-18T15:09:00.417 に答える