2012-05-14 56 views
0

PIテーブルから選択するLCID、LCNo、AmendmentStatusという3つの列を更新したいので、次の更新クエリを書き込んでいます:SQL Update複数の列から値が取得され、単一のクエリとして別のテーブルから取得するクエリ

UPDATE #TempTableOne 
    SET  
      LCID=(SELECT ISNULL(ExportLCID,0) FROM ExportLC WHERE ExportLCID= (SELECT LCID FROM [PI] WHERE PIID=(SELECT PIID FROM Job WHERE JobID=TT.OrderID))), 
      LCNo=(SELECT ISNULL(ExportLCNo,'') FROM ExportLC WHERE ExportLCID= (SELECT LCID FROM [PI] WHERE PIID=(SELECT PIID FROM Job WHERE JobID=TT.OrderID))), 
      AmendmentStatus=(SELECT AmendmentStatus FROM ExportLC WHERE ExportLCID= (SELECT LCID FROM [PI] WHERE PIID=(SELECT PIID FROM Job WHERE JobID=TT.OrderID))),  

    FROM #TempTableOne AS TT 
    WHERE TT.OrderType=3 

しかし、それは可能な更新クエリのようにのような単一のクエリを実行している:私はより速く私のクエリあなたQUERを変更

答えて

3

したいのので

Update #TempTableOne  
    SET SELECT LCID = ISNULL(ExportLCID,0) , 
     LCNo=ISNULL(ExportLCNo,''), 
     AmendmentStatus=AmendmentStatus 
    FROM ExportLC 
    WHERE ExportLCID = (SELECT LCID 
         FROM [PI] 
         WHERE PIID=(SELECT PIID 
            FROM Job 
            WHERE JobID=TT.OrderID 
            ) 
         ) 
       ) 

Update #TempTableOne  
    SET LCID = ISNULL(lc.ExportLCID,0) , 
     LCNo=ISNULL(lc.ExportLCNo,''), 
     AmendmentStatus=lc.AmendmentStatus 
    FROM #TempTableOne tt 
    JOIN Job on Job.JobID = TT.OrderID 
    JOIN [PI] on [PI].PIID = Job.PIID 
    JOIN ExportLC lc on [PI].LCID = lc.ExportLCID 
+0

私はのように同じように集計関数を使用する場合:yは、多くのより速く、それをしなければならJOINSオフ動作するようにPIQty =(ISNULL(SUM(数量)を選択し、0)PIProducts FROM WHERE PIID =(のジョブからPIIDを選択(SELECT ID = TT.OrderID)AND ProductID = TT.ProductID)、 \t - SampleAdjQty =(SELECT ISNULL(SUM(AdjQty)、0)PIProductsからPIID =(ジョブIDをJobID = TT.OrderIDのジョブから選択します)AND (ProductID = TT.ProductID)、 \t - SampleAdjValue =(SELECT ISNULL(SUM(AdjValue)、0)PIIP = WHERE PIID =(ジョブIDをJobID = TT.OrderIDから選択します)AND ProductID = TT.ProductID)から –

関連する問題