-4

非常に多くの顧客レコードに影響を与える SQL を書くのは少し緊張します。

注文テーブルと顧客テーブルがあります。ProductA と ProductB の 2 つの製品を販売しています。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

いいえ!そうではありません。製品 b も購入したかどうかに関係なく、製品 A を購入したすべての顧客をクリアします。

次のようなselectステートメントが必要です

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

おそらく、結合を使用してより効率的に行うことができますが、それが1回限りの場合は、それを行う必要があります.

それを確認します

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 に答える