-4

写一些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'

就那么简单?

4

2 回答 2

1

您如何SELECT声明一下哪些记录会受到影响?

SELECT c.*
FROM   customers AS c
  JOIN orders
    ON c.CustomerNumber = orders.CustomerNumber
WHERE  orders.Product = 'ProductA'
于 2013-09-19T14:59:00.560 回答
0

不!不对,它会清除所有购买过产品A的客户,而不管他们是否也购买过产品b。

您需要一个选择语句,例如

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

只返回您期望的客户

于 2013-09-19T15:01:09.980 回答