gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 23:00:23 25 4
gpt4 key购买 nike

这些是表格

表四

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字符串)

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

关于mysql - SQL-如何从另一个表中选择包含多个值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28519079/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com