2012-12-19 4 views
0

필자는 필사적으로이 일을 끝내기 위해 열심히 노력했지만 열심히 노력했지만 성공하지 못했습니다. 나는이 쿼리를 실행할 때 반복되는 값을 얻는다.SQL에서 반복되는 값 받기

select 
    tbl_ShipmentStatus.ShipmentID 
    ,Tbl_Contract.ContractID, 
    Tbl_Contract.KeyWinCountNumber, 
    Tbl_Item.ItemName, 
    Tbl_CountryFrom.CountryFromName, 
    Tbl_CountryTo.CountryToName, 
    Tbl_Brand.BrandName, 
    Tbl_Count.CountName, 
    Tbl_Seller.SellerName, 
    Tbl_Buyer.BuyerName, 
    Tbl_Contract.ContractNumber, 
    Tbl_Contract.ContractDate, 
    tbl_CountDetail.TotalQty, 
    tbl_CostUnit.CostUnitName, 
    tbl_Comission.Payment, 
    tbl_Port.PortName, 
    Tbl_Contract.Vans, 
    tbl_Comission.ComissionPay, 
    tbl_Comission.ComissionRcv, 
    tbl_CountDetail.UnitPrice, 
    tbl_Comission.ComissionRemarks, 
    tbl_CountDetail.Amount, 
    tbl_LCStatus.LCNumber, 
    tbl_ShipmentStatus.InvoiceNumber, 
    tbl_ShipmentStatus.InvoiceDate, 
    tbl_ShipmentStatus.BLNumber, 
    tbl_ShipmentStatus.BLDate, 
    tbl_ShipmentStatus.VesselName, 
    tbl_ShipmentStatus.DueDate 
    from tbl_ShipmentStatus 

    inner join tbl_LCStatus 
    on 
    tbl_LCStatus.LCID = tbl_ShipmentStatus.LCStatusID 

    inner join Tbl_Contract 
    on 
    tbl_LCStatus.ContractID = Tbl_Contract.ContractID 

    inner join Tbl_CountDetail 
    on Tbl_Contract.ContractID = Tbl_CountDetail.ContractId 

    inner join tbl_Comission 
    on 
    tbl_Comission.ContractID = Tbl_Contract.ContractID 

    inner join Tbl_Item 
    on 
    Tbl_Item.ItemID = Tbl_Contract.ItemID 

    inner join Tbl_Brand 
    on Tbl_Brand.BrandID = Tbl_Contract.BrandID 
    inner join Tbl_Buyer 
    on Tbl_Buyer.BuyerID = Tbl_Contract.BuyerID 
    inner join Tbl_Seller 
    on Tbl_Seller.SellerID = Tbl_Contract.SellerID 
    inner join Tbl_CountryFrom 
    on Tbl_CountryFrom.CountryFromID = Tbl_Contract.CountryFromID 
    inner join Tbl_CountryTo 
    on 
    Tbl_CountryTo.CountryToID = Tbl_Contract.CountryToID 
    inner join Tbl_Count 
    on 
    Tbl_Count.CountID = Tbl_CountDetail.CountId 
    inner join tbl_CostUnit 
    on tbl_Comission.CostUnitID = tbl_CostUnit.CostUnitID 
    inner join tbl_Port 
    on tbl_Port.PortID = tbl_Comission.PortID 

    where tbl_LCStatus.isDeleted = 0 
    and tbl_ShipmentStatus.isDeleted =0 
    and tbl_LCStatus.isDeleted = 0 
    and Tbl_CountDetail.isDeleted = 0 
    and Tbl_Contract.isDeleted = 0 

    and tbl_ShipmentStatus.LCStatusID = 5 

또한 내 결과 집합 사진을 첨부했습니다. 이 문제가 발생하는 이유는 무엇보다 좋습니다.

Result Set

답변

0

DISTINCT 키워드를 사용해보십시오. 문제를 해결해야합니다.

Select DISTINCT .... 

귀하의 기록이 중복되지 않는 한 기다려주십시오.

그러나이

주목하라 CountName 열 및 Shipment ID

조합은 모든 행에 대해 고유합니다. 그러므로 값은 내가 볼 수있는 한 독특합니다. CountName을 선택하지 마십시오.

고유 한 행이 있으면 복제 문제가 아닙니다. 조합을 수행하는 동안 문제가 발생하여 결과를 복제하지 못하게됩니다.

CountName을 선택하지 않았거나 데이터에 실수가 있습니다.

Count1과 함께 6 또는 Count1과 함께 6 개의 행 중 하나만 참이어야합니다. 마찬가지로 당신은 당신의 논리 실수를 나타내지 않을 때 양자를 얻는다.

+0

<- 나 또한 별개이지만 너무 도움이되지 않았습니다. –

+0

CountName과 Shipment ID의 조합은 2 행에 대해서만 고유합니다. 위의 쿼리는 2 개의 레코드를 반환해야하지만 2 개의 레코드를 4로 복사해야합니다. –

+0

dude 6..count 2, 7..count 2, 6..count 1, 7..count 1. 이들은 4 개의 별개의 쌍입니다. – cjds

1

일반적으로 두 테이블 사이에 암시 적 부분 교차 결합 (직교 곱)이있을 때 발생한다. 그게 내게 여기있는 것처럼 보입니다.

이렇게하면 다 - 대 - 다 관계가있을 때 가장 자주 발생합니다. 단일 Album 허용 모두 여러 Artists 복수 SongsArtistsSongs 간의 유일한 관계 Album 인 경우, 예를 들어, 다음과 ArtistsSongs 사이 대다 관계는 본질적있다. 3 개의 테이블을 동시에 선택하면 암시 적으로 ArtistsSongs을 십자가에 합류하게됩니다. 그러면 원하는 결과가 아닐 수 있습니다.

쿼리를 보면 Tbl_CountDetailtbl_Comission에서 Tbl_Contract 사이의 many-to-many를 볼 수 있습니다. 이러한 조인 중 하나를 제거하여 비헤이비어가 사라지는 지 테스트하십시오.