SQL-如何 select 行从另一个 table 获得多个值

SQL-how to select rows which much multiple values from another table

这些是表格

Table 四

create table FOURN(NF CHAR(2),NomF VARCHAR(10),Code int(2),VilleF VARCHAR(10));  

Table REVEND

create table REVEND(NR CHAR(2),NomR CHAR(10),VilleR  CHAR(10) );

Table VOITURE

create table VOITURE(NV CHAR(2),NomV    CHAR(15),Couleur CHAR(10),Prix int(4));

Table FVR

create table FVR(NFCHAR(2),NV CHAR(2),NR CHAR(2),Qle  int(3)));

我想检索供应给所有伦敦供应商的汽车 (NV) 的数量。 这是表格的内容
http://i.imgur.com/ZwsloAr.png
这是我写的查询

select distinct NV
from FVR, REVEND  
where REVEND.NR = FVR.NR AND REVEND.VilleR="LONDRES";  

这个 return 的 V3、V5、V6 但它应该 return 只有 V3 和 V5
因为那些是唯一交付给所有伦敦供应商的汽车
http://sqlfiddle.com/#!2/4d4e4a/2

解决方案
select NV from fvr where NR in (select NR from revend where villeR='Londres') group by NV having count(distinct NR) = (select count(NR) from revend where villeR='Londres');

要检索一个数字,例如提供给所有伦敦供应商的汽车数量 (NV),请使用计数关键字

select count(*) cars
from etc

我不清楚 fournisseurs table 应该在这里做什么。如果 table 几乎无关紧要,那么以下内容应该有效。

这将加入 fvr table 到 revendeurs table 然后乘坐不同的车辆......不幸的是我无法想出更动态的方式......但如果你有少数 londres vendeurs 它应该是可行的。也许有人可以改善答案。

Select distinct NV FROM
  FVR LEFT OUTER JOIN REVEND ON FVR.NR = REVEND.NR
  WHERE FVR.NV IN (SELECT NV FROM FVR LEFT OUTER JOIN REVEND ON FVR.NR = REVEND.NR WHERE REVEND.NR = 'R5') 
  AND FVR.NV IN (SELECT NV FROM FVR LEFT OUTER JOIN REVEND ON FVR.NR = REVEND.NR WHERE REVEND.NR = 'R7')

如果您要查找同时销售给 R5 和 R7 的汽车数量的总和,而不计算仅销售给两家零售商之一的汽车,则应该是

Select SUM(Qte) FROM
  FVR LEFT OUTER JOIN REVEND ON FVR.NR = REVEND.NR
  WHERE FVR.NV IN (SELECT NV FROM FVR LEFT OUTER JOIN REVEND ON FVR.NR = REVEND.NR WHERE REVEND.NR = 'R5') 
  AND FVR.NV IN (SELECT NV FROM FVR LEFT OUTER JOIN REVEND ON FVR.NR = REVEND.NR WHERE REVEND.NR = 'R7')

编辑:

我创建了一个 sqlfiddle 来演示自动执行此过程,而不必为每个新供应商手动更新它。我已经放置了一个存储函数和一个存储过程(函数仅 returns sql 字符串)

http://sqlfiddle.com/#!2/c89e31/1