首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >加入时在Server中获取重复记录

加入时在Server中获取重复记录
EN

Stack Overflow用户
提问于 2022-02-07 10:13:09
回答 1查看 859关注 0票数 0

我将连接三个表来获取数据,但是在加入结果集之后,会显示重复的记录。

即使我们添加了不同的关键字,也会得到多个记录。

即使在使用distinct之后,这个结果也是A的2倍。我的预期结果只有一个。

我们提供表名和结构,加入前2个表后得到无重复记录,加入第三个表后得到重复记录。

我们得到像这样的输出,图像,检查它们

表是

  1. dbo.t_Oed_followupDetails tefd
  2. dbo.t_vehiclenotreachedworkshop_remarks tvnrw
  3. dbo.t_vehicleEstimationNotRaised_remarks

表结构:

代码语言:javascript
运行
复制
CREATE TABLE [dbo].[t_Oed_followupDetails]
(
    [id] [int] IDENTITY(1,1) NOT NULL,
    [breakdownID] [bigint] NULL,
    [vehicleNumber] [varchar](50) NULL,
    [offroadDate] [datetime] NULL,
    [workshopreachedtime] [datetime] NULL,
    [estimationRaisedTime] [datetime] NULL,
    [estimationApprovedtime] [datetime] NULL,
    [workstartTime] [datetime] NULL,
    [workendTime] [datetime] NULL,
    [PilotReachedToWs] [datetime] NULL,
    [vehiclereachedtoBacktoBase] [datetime] NULL,
    [VehicleOnroad] [datetime] NULL,
    [lastFollowupTime] [datetime] NULL,
    [progress] [int] NULL,
    [pagetoLoad] [varchar](500) NULL,
    [nextFolloupdate] [datetime] NULL
) 
    
CREATE TABLE [dbo].[t_vehiclenotreachedworkshop_remarks]
(
    [id] [int] IDENTITY(1,1) NOT NULL,
    [breakdownid] [bigint] NULL,
    [vehicleno] [varchar](30) NULL,
    [callto] [varchar](30) NULL,
    [Reason] [varchar](100) NULL,
    [remarks] [varchar](200) NULL,
    [createdby] [varchar](30) NULL,
    [createdtime] [datetime] NULL DEFAULT (getdate()),
    [popupDate] [datetime] NULL,
    [ReasonID] [int] NULL
)
               
CREATE TABLE [dbo].[t_vehicleEstimationNotRaised_remarks]
(
    [id] [int] IDENTITY(1,1) NOT NULL,
    [breakdownid] [bigint] NULL,
    [vehicleno] [varchar](30) NULL,
    [callto] [varchar](30) NULL,
    [Reason] [varchar](100) NULL,
    [remarks] [varchar](200) NULL,
    [createdby] [varchar](30) NULL,
    [createdtime] [datetime] NULL DEFAULT (getdate()),
    [popupDate] [datetime] NULL,
    [ReasonID] [int] NULL
)

在加入显示结果的3个表之后,得到重复的记录。

我的join查询:

代码语言:javascript
运行
复制
SELECT DISTINCT
    (tefd.breakdownID),
    tefd.vehicleNumber,
    tefd.offroadDate,
    tvnrw.Reason AS Reasonwnr,
    tvnrw.popupDate AS startTimewnr,
    tvnrw.createdtime AS endTimewnr,
    CAST(tvnrw.createdtime - tvnrw.popupDate AS time) AS AHTwnr,
    tvenr.Reason AS ReasonEastNotRaised,
    tvenr.popupDate AS startTimeEastNotRaised,
    tvenr.createdtime AS endTimeEastNotRaised,
    CAST(tvenr.createdtime - tvenr.popupDate AS time) AS AHTEastNotRaised
FROM
    [dbo].[t_Oed_followupDetails] tefd
LEFT JOIN 
    [dbo].[t_vehiclenotreachedworkshop_remarks] tvnrw ON tefd.breakdownID = tvnrw.breakdownid
LEFT JOIN 
    [dbo].[t_vehicleEstimationNotRaised_remarks] tvenr ON tvenr.breakdownid = tefd.breakdownID
WHERE 
    tefd.breakdownid = 415450;
EN

回答 1

Stack Overflow用户

发布于 2022-02-08 06:15:10

行不是重复的。当您连接前两个表时,它们之间的关系是1:1,这意味着表A中的每个记录在表B中都有一个记录,因此没有冗余。但是,当你加入第三个,它有1:M关系表(A,连接B)。

现在,考虑一个学生注册多学科。学生与主题的连接将返回数据,其中学生列将有多余的值,而subect列将有不同的值。DISTINCT()在这里不能工作,因为总体上行是唯一的,即使单个列具有不同的值。

你能做的就是使用Group。它将对A、B中的列和C中的聚合列进行分组,如SUM()、Count()等,但是SQL不能神奇地删除数据,只显示单个记录。您将不得不查询获取数据丢失成本的单个记录。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71016774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档