我将连接三个表来获取数据,但是在加入结果集之后,会显示重复的记录。
即使我们添加了不同的关键字,也会得到多个记录。
即使在使用distinct之后,这个结果也是A的2倍。我的预期结果只有一个。
我们提供表名和结构,加入前2个表后得到无重复记录,加入第三个表后得到重复记录。
我们得到像这样的输出,图像,检查它们

表是
表结构:
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查询:
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;发布于 2022-02-08 06:15:10
行不是重复的。当您连接前两个表时,它们之间的关系是1:1,这意味着表A中的每个记录在表B中都有一个记录,因此没有冗余。但是,当你加入第三个,它有1:M关系表(A,连接B)。
现在,考虑一个学生注册多学科。学生与主题的连接将返回数据,其中学生列将有多余的值,而subect列将有不同的值。DISTINCT()在这里不能工作,因为总体上行是唯一的,即使单个列具有不同的值。
你能做的就是使用Group。它将对A、B中的列和C中的聚合列进行分组,如SUM()、Count()等,但是SQL不能神奇地删除数据,只显示单个记录。您将不得不查询获取数据丢失成本的单个记录。
https://stackoverflow.com/questions/71016774
复制相似问题