gpt4 book ai didi

sql - SQL 查询中的不同值 - 高级

转载 作者:行者123 更新时间:2023-12-04 06:30:14 27 4
gpt4 key购买 nike

我搜索了高低,并尝试了几个小时来操纵似乎适合的各种其他查询,但我没有快乐。

我试图加入 Microsoft SQL Server 2005 中的几个表,其中一个示例是:

Company Table (Comp_CompanyId, Comp_Name)
GroupCode_Link Table (gcl_c_groupcodelinkid, gcl_c_groupcodeid, gcl_c_companyid)
GroupCode Table (grp_c_groupcodeid, grp_c_groupcode, grp_c_name)
ItemCode Table (itm_c_itemcodeid, itm_c_name, itm_c_itemcode, itm_c_group)
ItemCode_Link Table (icl_c_itemcodelinkid, icl_c_companyid, icl_c_groupcodeid, icl_c_itemcodeid)

我使用链接表将一个组关联到一个公司,将一个项目关联到一个组,因此一个公司可以有多个组,每个组中有多个项目。

现在,我正在尝试创建一个高级查找功能,它允许用户输入,例如,一个项目代码,结果应该显示那些拥有该项目的公司,听起来不错而且简单!

但是,我没有做正确的事情,如果我使用以下查询“如果公司有这个项目或这个项目,显示它的名称”,我会让公司在结果集中出现两次,每个项目一次。

我需要的是能够说的是:

“向我展示拥有这些项目的公司列表(每家公司只显示一次!)”

我曾尝试使用 COUNT、DISTINCT 和 HAVING,但都失败了,因为我的查询知识达不到它!

最佳答案

首先,从您的描述来看,您的 E-R(实体关系)模型可能有问题。你的描述告诉我你的 E-R 模型看起来像这样:

original E-R model

关联实体 (CompanyGroup, GroupItem) 的存在是为了实现多对多关系(因为关系数据库不直接支持多对多)。

如果一个组可以存在于多个公司中或跨多个组存在一个项目,那没有错。似乎更有可能的是,至少每个组都特定于一家公司(我可以看到多个公司和/或组中存在的项目:不止一家公司零售,例如 Cuisinart 食品加工商)。如果是这种情况,更好的 E-R 模型是让每个组成为 依赖实体 具有作为其主键组成部分的 CompanyID。它是一个依赖实体,因为该集团没有独立存在:它由/代表其母公司创建并为母公司存在。如果公司消失,与之相关的团体就会消失。不,您的 E-R 模型如下所示:

simplified E-R model

由此,我们可以编写您需要的查询:

select *
from Company c
where exists ( select *
from GroupItem gi
where gi.ItemID in ( desired-itemid-1 , ... , desired-itemid-n )
and gi.CompanyID = c.CompanyID
)

如您所见,依赖实体是一种强大的东西。由于 key 传播,查询往往变得更简单。使用原始数据模型,查询会稍微复杂一些:
select *
from Company c
where exists ( select *
from CompanyGroup cg
join GroupItem gi on gi.GroupId = cg.GroupID
where gi.ItemID in ( desired-itemid-1 , ... , desired-itemid-n )
and cg.CompanyID = c.CompanyID
)

干杯!

关于sql - SQL 查询中的不同值 - 高级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5515019/

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