这个UPDATE语句是否正确?

时间:2013-09-19 14:54:58

标签: mysql sql sql-update

当它会影响到如此多的客户记录时,我会有点紧张地写一些SQL!

我有一张订单表和一张客户表。我们销售两种产品,ProductA和ProductB。我想清除仅购买ProductA的客户的所有地址记录。这句话是对的:

UPDATE customers AS c
JOIN orders ON c.CustomerNumber = orders.CustomerNumber
SET
 c.Add1= '',
 c.Add2= '',
 c.PostCode= ''
WHERE
    orders.Product = 'ProductA'

那么简单吗?

2 个答案:

答案 0 :(得分:1)

如何使用SELECT语句查看哪些记录会受到影响?

SELECT c.*
FROM   customers AS c
  JOIN orders
    ON c.CustomerNumber = orders.CustomerNumber
WHERE  orders.Product = 'ProductA'

答案 1 :(得分:0)

没有!这是不对的,它将清除所有购买产品A的客户,无论他们是否也购买了产品。

您需要一个像

这样的选择语句
UPDATE customers AS c

SET
 c.Add1= '',
 c.Add2= '',
 c.PostCode= ''
WHERE
    c.CustomerNo in (select customerNo from orders where Orders.Product = 'ProductA')
    AND
    c.CustomerNo not in (select customerNo from orders where Orders.Product = 'ProductB')

你可以通过连接更有效地做到这一点,但是如果它只是一次性应该这样做。

检查

select * from customers

WHERE
    c.CustomerNo in (select customerNo from orders where Orders.Product = 'ProductA')
    AND
    c.CustomerNo not in (select customerNo from orders where Orders.Product = 'ProductB')

只返回您期望的客户