如何连接多个表而不显示重复数据?

时间:2016-07-28 05:29:48

标签: sql sql-server-2012

我最近遇到了一个问题,我确定它是因为我加入它们的方式。 这是我的代码:

select LP_Pending_Info.Service_Order,
    LP_Pending_Info.Pending_Days,
    LP_Pending_Info.Service_Type,
    LP_Pending_Info.ASC_Code,
    LP_Pending_Info.Model,
    LP_Pending_Info.IN_OUT_WTY, 
    LP_Part_Codes.PartCode,
    LP_PS_Codes.PS,
    LP_Confirmation_Codes.SO_NO,
    LP_Pending_Info.Engineer_Code
from LP_Pending_Info

join LP_Part_Codes 
on LP_Pending_Info.Service_order = LP_Part_Codes.Service_order

join LP_PS_Codes 
on LP_Pending_Info.Service_Order = LP_PS_Codes.Service_Order

join LP_Confirmation_Codes 
on LP_Pending_Info.Service_Order = LP_Confirmation_Codes.Service_Order

order by LP_Pending_Info.Service_order, LP_Part_Codes.PartCode;

enter image description here

对于每个服务订单,我最多有5个部分代码。

如果服务订单只有一个值,它会正确显示结果,但是当它有多个零件代码时,问题就会开始。

例如:此服务订单“4182134076”只有2个部分代码,第一个是“GH81-13601A”,第二个是“GH96-09938A”,因此它应该显示数据2次,但重复8次。什么似乎是问题?

3 个答案:

答案 0 :(得分:2)

如果您的记录完全相同,distinct关键字就会解决它。

但是,在第2行和第3行中,Service_OrderPart_Code具有相同的SO_NO,如果您检查join,则表明它是不同的 - 这就是为什么“不同”在这里不起作用的原因 - 行不相同。

我说你在SO_NO的某个条件中遇到了一些问题。不同的数据位于LP_Confirmation_Codes列中,因此请检查Service_Order表中select * from LP_Confirmation_Codes where Service_Order = 4182134076 的原始数据:

and

我假设您错过了LP_Part_Codes来自LP_PS_Codesand的值(但如果没有自己查看这些表和数据,则无法确定)。

通过这句话如果服务订单只有一个值,它会正确显示结果,但是当它有多个零件代码时,问题就会开始。 - 可能你错过了LP_Part_Codes使用domain.com/ |--larco |-- public_html/ | |--laravel

答案 1 :(得分:0)

根据您的输出结果,以下是导致多次输出的以下数据。

Service Order: 4182134076有:

2 PartCode GH81-13601AGH96-09938A

2 PS UP

2 SO_NO 1.00024e+091.00022e+09

因此2 ^ 3返回8行。我相信你需要检查你应该加入你的桌子的位置。

答案 2 :(得分:-1)

使用DINTINCT

select distinct LP_Pending_Info.Service_Order,LP_Pending_Info.Pending_Days,
LP_Pending_Info.Service_Type,LP_Pending_Info.ASC_Code,LP_Pending_Info.Model,
LP_Pending_Info.IN_OUT_WTY, LP_Part_Codes.PartCode,LP_PS_Codes.PS,
LP_Confirmation_Codes.SO_NO,LP_Pending_Info.Engineer_Code
from LP_Pending_Info
 join LP_Part_Codes on LP_Pending_Info.Service_order = LP_Part_Codes.Service_order
 join LP_PS_Codes on LP_Part_Codes.Service_Order = LP_PS_Codes.Service_Order
 join LP_Confirmation_Codes on LP_PS_Codes.Service_Order = LP_Confirmation_Codes.Service_Order
order by LP_Pending_Info.Service_order, LP_Part_Codes.PartCode;

distinct不会根据您的选择返回重复项。因此,如果一行相同,则只返回一次。