SQL Double NOT IN对COUNT

时间:2017-04-25 09:06:23

标签: mysql

我需要创建一个查询,它为我提供了客户的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

1 个答案:

答案 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在请求中提到的那样:这些查询并不寻找已经订购了至少一种产品类型的客户,但是对于那些已经订购过的客户而言订购了所有三种产品。