2009-02-05 3 views
2

다음 코드가 실행되면 조인 제 notExists은 (custTable) 가입의중첩 notExists는 X가 ++ (역학 AX3.0)

select sum(qty) from inventTrans 
     index hint TransTypeIdx 
     where inventTrans.ItemId  == itemId 
      && inventTrans.TransType  == InventTransType::Sales 
      && inventTrans.InventDimId == inventDimId 
     notExists join custTable 
     where custTable.AccountNum  == inventTrans.CustVendAC 
      && custTable.CustGroup  == custGroupId 
     notExists join salesTable 
     where salesTable.SalesId  == inventTrans.TransRefId 
      && salesTable.Extraordinary == NoYes::Yes; 

는 SQL 생성 둥지 제 notExists WHERE 절에 (salesTable)에 가입. 생성 된 SQL은 다음과 유사 할 수 있도록 즉,

SELECT SUM(A.QTY) 
FROM 
    INVENTTRANS A 
WHERE 
    A.DATAAREAID = 'MyCompany' 
AND A.ITEMID  = 'MyItem' 
AND A.TRANSTYPE = 0 
AND A.INVENTDIMID = 'SomeValue' 
AND NOT EXISTS (SELECT 'x' 
       FROM CUSTTABLE C 
       WHERE C.DATAAREAID ='MyCompany' 
       AND C.ACCOUNTNUM =A.CUSTVENDAC 
       AND C.CUSTGROUP  ='SomeCustGroup' 
       AND NOT EXISTS (SELECT 'x' 
           FROM SALESTABLE B 
           WHERE 
            B.DATAAREAID ='MyCompany' 
           AND B.SALESID  =A.TRANSREFID 
           AND B.EXTRAORDINARY =1)) 

는 notExists에 쿼리를 선택 ++ X를 쓸 수있는 방법이있다 대신 custTable의 inventTrans 테이블에 salesTable을 조인인가?

SELECT SUM(A.QTY) 
FROM 
    INVENTTRANS A 
WHERE A.DATAAREAID  = 'MyCompany' 
AND A.ITEMID   = 'MyItem' 
AND A.TRANSTYPE  = 0 
AND A.INVENTDIMID  = 'SomeValue' 
AND NOT EXISTS (SELECT 'x' 
       FROM CUSTTABLE C 
       WHERE C.DATAAREAID ='MyCompany' 
       AND C.ACCOUNTNUM =A.CUSTVENDAC 
       AND C.CUSTGROUP  ='SomeCustGroup') 
AND NOT EXISTS (SELECT 'x' 
       FROM SALESTABLE B 
       WHERE 
        B.DATAAREAID='MyCompany' 
       AND B.SALESID=A.TRANSREFID 
       AND B.EXTRAORDINARY=1) 

답변

1

짧은 대답 : 아니오! 당신의 예에서

, 당신은 내부 조인 사용하여 재구성 수 :

select sum(qty) from inventTrans 
    index hint TransTypeIdx 
    where inventTrans.ItemId  == itemId 
     && inventTrans.TransType  == InventTransType::Sales 
     && inventTrans.InventDimId == inventDimId 
    join salesTable 
    where salesTable.SalesId  == inventTrans.TransRefId 
     && salesTable.Extraordinary == NoYes::No; 
    notExists join custTable 
    where custTable.AccountNum  == inventTrans.CustVendAC 
     && custTable.CustGroup  == custGroupId 

이 인보이스 때 판매 주문을 삭제하지 않는 한 작동합니다.

1

아마도 더 이상 대답을 기다리지 않고 있지만 Ax 2012에서는 여전히 동일한 문제가 발생했습니다.

(따로 SQL 문을 사용하는) 다른 해결책을 찾을 수

아니라 가장 성능이 좋은 하나,하지만 작동합니다

  • 는 쿼리를 만듭니다 : 선택 * notexists이 CustTable 가입 inventTrans에서 ....
  • 선택 INVE을 다음과 같이 salesTable

  • 변화를위한 당신의 선택 문을 동일한 작업을 수행하는 쿼리

  • 를 기반으로 뷰를 생성합니다 ntTrans

    ...

    이 myCustView에 가입하세요 존재

    myCustView.InventTransRecId == inventTrans.RecId

    이 mySalesView에 가입하세요 존재

    곳 ...

희망에 따라

관련 문제