1

サンプルクエリは次のとおりです。

SELECT customerName from customers 
WHERE customerNUMBER IN 
( SELECT customerNumber FROM orders 
  WHERE orderNumber 
    IN ( SELECT orderNumber FROM orderdetails 
    INNER JOIN products on orderdetails.productCode = products.productCode 
    where products.buyPrice > 100 ));

表は自明だと思います。

これを行うより良い方法はありますか?

ここでSQL初心者。

4

3 に答える 3

13

私の提案は、すべての WHERE/IN 句のフィルタリングではなく、これをJOIN構文に変更することです。

select c.customerName
from customer c
inner join orders o
  on c.customerNumber = o.customerNumber
inner join orderdetails od
  on o.orderNumber = od.orderNumber
inner join products p
  on od.productCode = p.productCode
where p.buyPrice > 100;

必要に応じて、重複がある場合にクエリに DISTINCT を追加する必要がある場合があります。

于 2013-05-01T16:31:22.600 に答える
8

全体を通して通常の内部結合を使用し、重複を排除する必要がある場合は group by または distinct 句を使用します。

select customers.*
from customers
join orders on ...
join orderdetails on ...
join products on ...
group by customers.customerNumber
于 2013-05-01T16:30:50.750 に答える