当它会影响到如此多的客户记录时,我会有点紧张地写一些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'
那么简单吗?
答案 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')
只返回您期望的客户