如果条件为真,则删除表中的行

时间:2018-03-13 16:04:20

标签: sql-server

目标:使用查询 - 删除所有没有资产的客户

我有2张桌子。我想删除我的count = 0的所有行:

我的情况

if (SELECT COUNT(*) FROM Asset_Table WHERE Customer_ID='myString' ==0){
   Delete row from Account_table 
}

Accounts_Table:

CustomerID       |    Customer_Name  |   Onwner 
-------------------------------------------------------------
 123             |           Jake     |     someowner1
 124             |           Ralph    |     someowner2
 ...             |            ....    |      ....

Asset_Table:

AssetINDEX     | Customer_ID |  Serial_ID |
-------------------------------------------------
    5564       |     123     |  xyz    
    5565       |     128     |  xyz1
    ....       |    ...      |  xyz2

预期结果

Accounts_Table:

CustomerID       |    Customer_Name  |   Onwner 
-------------------------------------------------------------
 123             |           Jake     |     someowner1
 ...             |            ....    |      ....

Asset_Table:

AssetINDEX     | Customer_ID |  Serial_ID |
-------------------------------------------------
    5564       |     123     |  xyz    
    ....       |    ...      |  xyz2

4 个答案:

答案 0 :(得分:1)

  

删除所有没有资产的客户

您可以使用exists来验证 Asset_Table 中不存在的行:

delete from Account_table AT
 where not exists (select AssetINDEX from Asset_Table 
                    where Customer_ID = AT.CustomerID)

答案 1 :(得分:1)

以下查询应该有效;

delete from Accounts_Table where CustomerID not in (select Customer_ID from Asset_Table )

答案 2 :(得分:1)

它出现在"结果"你在问题中提出了你希望双向清理数据的方法。这样,剩下的唯一记录在两个表中都有引用。为此,您需要两个语句,并且可以使用EXISTS子句。

DELETE FROM Accounts_Table 
WHERE NOT EXISTS (SELECT CustomerID FROM Asset_Table WHERE Accounts_Table.CustomerID 
= Asset_Table.Customer_ID)

DELETE FROM Asset_Table 
WHERE NOT EXISTS (SELECT AssetINDEX FROM Accounts_Table where Asset_Table.Customer_ID 
= Accounts_Table.CustomerID)

答案 3 :(得分:0)

DELETE C FROM
    Account_table AS C
WHERE
    NOT EXISTS (
        SELECT
            'the customer does not have any asset'
        FROM
            Asset_Table AS A
        WHERE
            A.Customer_ID = C.Customer_ID)