SQL-如何从另一个表中选择多个值的行

时间:2015-02-14 18:58:06

标签: mysql sql select join

这些是表格

表格FOURN

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

表格REVEND

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

表格VOITURE

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

表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";  

这会返回V3,V5,V6但它应该只返回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');

2 个答案:

答案 0 :(得分:0)

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

select count(*) cars
from etc

答案 1 :(得分:0)

我不清楚应该在这里使用fournisseurs表。如果该表大部分无关紧要,则以下内容应该有效。

这会将fvr表加入到revendeurs表然后采取不同的车辆...不幸的是我无法想出一个更有活力的方式......但如果你有少量的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来演示自动执行此过程,而不必为每个新供应商手动更新它。我已经存放了一个存储函数和一个存储过程(该函数只返回sql字符串)

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