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 字符串)
这些是表格
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 字符串)