更新: 実行が簡単な場合は、パフォーマンスを向上させるために結合を使用することを優先する必要があります。 結合とサブクエリ
Select distinct Customer from orders o
join
(
SELECT distinct Customer as changedname FROM Orders o2
join
(
Select distinct invoice from Promotions where Coupon='couponA'
) t3
on o2.invoice = t3.invoice
) t2
on o.customer != t2.changedname;
注:2つの結合されたテーブルは異なる列名を持っている必要があるため、t3の列名customerを変更しました
説明:
ビッグデータがある場合、内部クエリまたはサブクエリの使用にはコストがかかります。代わりに結合を使用して、サブクエリを結合に変換する方法を学びましょう
サブクエリを使用 持っていた:
Select distinct Customer from orders where customer not in
(SELECT distinct Customer FROM Orders where invoice in
(Select distinct invoice from Promotions where Coupon='couponA'));
サブクエリを結合に変換する
最初のステップ:
Select distinct Customer from orders o
join
(
SELECT distinct Customer as changedname FROM Orders where invoice in
(Select distinct invoice from Promotions where Coupon='couponA')
) t2
on o.customer != t2.changedname;
2番目のステップ:
Select distinct Customer from orders o
join
(
SELECT distinct Customer as changedname FROM Orders o2 where invoice
join
(
Select distinct invoice from Promotions where Coupon='couponA'
) t3
on o2.invoice = t3.invoice
) t2
on o.customer != t2.changedname;
これで、多数の行を持つテーブルの場合ははるかに高速になります
元の回答:
not in
を使用する 。ご覧ください。
Select distinct Customer from orders where customer not in
(SELECT distinct Customer FROM Orders where invoice in
(Select distinct invoice from Promotions where Coupon='couponA'));
編集 クエリを高速化するためにdistinctを追加しました