0

私はこれを成し遂げるために必死に一生懸命努力しましたが、まだ成功していません。このクエリを実行すると、値が繰り返されます。

 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

行の結果セットの写真も添付しました。なぜこれが起こっているのかについての提案は、本当にかなりの価値があります。

結果セット

4

2 に答える 2

1

通常、これは、2 つのテーブル間に暗黙的な部分クロス結合 (デカルト積) がある場合に発生します。それが私にはここのように見えます。

これは、多対多の関係がある場合に最も頻繁に発生します。たとえば、1 つが複数と複数のAlbum両方を許可し、と の間の唯一の関係が である場合、 と の間には本質的に多対多の関係があります。一度に 3 つのテーブルすべてから選択すると、 と を暗黙的に交差結合することになり、これは望ましくない場合があります。ArtistsSongsArtistsSongsAlbumArtistsSongsArtistsSongs

あなたのクエリを見ると、多対多が betweenTbl_CountDetailtbl_ComissionthroughにあることがわかりますTbl_Contract。これらの結合の 1 つを削除して、動作が消えるかどうかをテストしてみてください。

于 2012-12-19T10:21:01.330 に答える
0

DISTINCTキーワードを使ってみてください。それはあなたの問題を解決するはずです

Select DISTINCT ....

あなたの記録が重複していないことがわかるまで待ってください。

でも

CountName列とShipment ID列に注意してください

組み合わせはすべての行で一意です。したがって、私が見る限り、値は一意です。を選択しないようにしてくださいCountName

個別の行がある場合、重複の問題ではありません。問題は、結合中に結果が複製されないようにすることです。

選択しないかCountName、データに誤りがあります。

これらの行のうち、Count2 の 6 または Count1 の 6 のいずれかが true になる必要があります。7 についても同様です。両方を取得するはずがないのに、論理的な誤りを示しているという事実

于 2012-12-19T09:29:11.703 に答える