sách gpt4 ai đã đi

Giá trị riêng biệt trong truy vấn SQL - Nâng cao

In lại 作者:行者123 更新时间:2023-12-04 06:30:14 27 4
mua khóa gpt4 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,但都失败了,因为我的查询知识达不到它!

1 Câu trả lời

首先,从您的描述来看,您的 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
Bài viết được đề xuất: tfs - TFS 中特定开发人员的整体代码覆盖率
Bài viết được đề xuất: ruby-on-rails - Rails 5 CarrierWave Gem 可用于生产,但不能用于开发
Bài viết được đề xuất: com - COINIT_SPEED_OVER_MEMORY 有什么作用?
Bài viết được đề xuất: TSQL 滚动平均时间分组
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com