这些是表格
表四
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
解决方案
从 fvr 中选择 NV,其中 NR (从 revend 中选择 NR,其中 villeR='Londres') 按 NV 进行分组,其中 count(distinct NR) = (从 revend 中选择 count(NR),其中 villeR='Londres');
最佳答案
我不清楚 fournisseurs 表在这里应该用来做什么。如果该表基本上不相关,那么以下应该有效。
这会将 fvr 表连接到 vendeurs 表,然后采用不同的车辆...不幸的是,我无法想出更动态的方式...但如果你有少量的 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字符串)
关于mysql - SQL-如何从另一个表中选择包含多个值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28519079/