我需要创建一个查询,它为我提供了客户的RefC,这些客户都使用count和double not in命令至少有一种类型的产品.count语句为:
SELECT NomC, RefC
FROM client NATURAL JOIN commande NATURAL JOIN detail NATURAL JOIN PRODUIT
WHERE TypeP IN ("clou", "cheville", "planche")
GROUP BY NomC
HAVING COUNT(DISTINCT TypeP) = 3;
我无法想出双重" NOT IN"相当的,并理解它背后的整体逻辑,并且:为什么我不能在这种情况下使用NOT EXISTS?任何帮助表示赞赏 net.Error
答案 0 :(得分:0)
这是具有三个IN子句的相同查询。您也可以使用EXISTS
(您始终可以使用EXISTS
代替IN
)。您不能使用NOT EXISTS
来查找它的内容吗?
SELECT NomC, RefC
FROM client
WHERE RefC IN
(
select c.refc
from commande c
join detail d on d.refcom = c.refcom
join produit p on p.refp = d.refp
where p.typep = 'clou'
)
AND RefC IN
(
select c.refc
from commande c
join detail d on d.refcom = c.refcom
join produit p on p.refp = d.refp
where p.typep = 'cheville'
)
AND RefC IN
(
select c.refc
from commande c
join detail d on d.refcom = c.refcom
join produit p on p.refp = d.refp
where p.typep = 'planche'
);
COUNT
查询比这更快(因为表格不必一次又一次地阅读)并且更易于阅读和维护。
但是正如Solarflare在请求中提到的那样:这些查询并不寻找已经订购了至少一种产品类型的客户,但是对于那些已经订购过的客户而言订购了所有三种产品。