2

組み合わせようとしている2つのSQLステートメントがあります。これはある種のjoinコマンドを使用して実行できると確信していますが、私はそれらを使用するのがあまり得意ではないので、誰かがここから助けてくれることを望んでいました。

私は始めたい:

SELECT DISTINCT CLOCFILEOT.CKEVNHM2.EVLEV1 AS WOSFROM 
FROM 
  CLOCFILEOT.CKEVNHM2, 
  (
    SELECT DISTINCT CONCAT('0',CPJDDTA81.F4801.WADOCO) AS WOS 
    FROM 
      CPJDDTA81.F4801,
      CPJDDTA81.F4102 
    WHERE 
          CPJDDTA81.F4102 .IBITM = CPJDDTA81.F4801.WAITM 
      AND CPJDDTA81.F4801.WASRST IN( '30', '45' ) 
      AND CPJDDTA81.F4102.IBSRP4 IN( 'ECT' )
      AND CPJDDTA81.F4801.WAMMCU = '      ECT001'
  ) SELECTEDWOS 
WHERE 
      CLOCFILEOT.CKEVNHM2.EVLEV1 = WOS 
  AND CLOCFILEOT.CKEVNHM2.EVLAB1 = 'E500'

そして、そのリストから次のものを減算します。

SELECT DISTINCT CLOCFILEOT.CKEVNHM2.EVLEV1 AS WOSTOSUBTRACT 
FROM 
  CLOCFILEOT.CKEVNHM2, 
  (
    SELECT DISTINCT CONCAT('0',CPJDDTA81.F4801.WADOCO) AS WOS 
    FROM 
      CPJDDTA81.F4801, 
      CPJDDTA81.F4102 
    WHERE 
          CPJDDTA81.F4102.IBITM = CPJDDTA81.F4801.WAITM 
      AND CPJDDTA81.F4801.WASRST IN( '30', '45' ) 
      AND CPJDDTA81.F4102.IBSRP4 IN( 'CAB' )
      AND CPJDDTA81.F4801.WAMMCU = '      STH001'
  ) SELECTEDWOS 
WHERE 
  CLOCFILEOT.CKEVNHM2.EVLEV1 = WOS

私はadodbvbaでそれを行っていますが、これは時々使用されるsqlコマンドのタイプを制限します。

前もって感謝します。

4

3 に答える 3

1

これを処理できる1つの方法は、EXCEPTを使用することです。

これがオプションでない場合は、次を使用してみることもできますNOT IN

SELECT DISTINCT EVLEV1 AS WOSFROM 
FROM CLOCFILEOT.CKEVNHM2
   , 
   (
      SELECT DISTINCT CONCAT('0', WADOCO) AS WOS 
      FROM CPJDDTA81.F4801
         , CPJDDTA81.F4102 
      WHERE IBITM = WAITM 
         AND WASRST IN( '30', '45' ) 
         AND IBSRP4 IN( 'ECT' )
         AND WAMMCU = '      ECT001'
   ) AS SELECTEDWOS 
WHERE EVLEV1 = WOS 
   AND EVLAB1 = 'E500'
   AND EVLEV1 NOT IN
   (
      SubQuery Here
   )
于 2012-06-20T17:46:23.100 に答える
0

最初のクエリでは...なぜクロス結合を実行していて、テーブルの1つと区別されているのかわかりません。2番目のテーブルを完全に削除できます。より良い回答が必要な場合は、列がどのテーブルからのものであるかをお知らせください。

参加を終了してnullを探すことができます

select <col a>
from <table A> 
left join <table B>
  on <col a> = <col b>
where <col b> is not null

またはする..

select <col a>
from <table A>
where <col a> not in (
    select <col b>
    from <table B>)
于 2012-06-20T17:47:28.873 に答える
0

あなたたちが助けてくれたことと周りのことを変えることと組み合わせて、私は気にかけている人のための解決策を持っています:

SELECT WOSTO, AREATO, WOSFROM, STATIONFROM
FROM
(
   SELECT DISTINCT CONCAT('0', WADOCO) AS WOSTO, IBSRP4 AS AREATO
      , WOSFROM AS WOSFROM, PWOSFROM AS PWOSFROM, STATIONFROM AS STATIONFROM
   FROM CPJDDTA81.F4801
      , CPJDDTA81.F4102
      ,
      (
         SELECT DISTINCT EVLEV1 AS WOSFROM, EVLAB2 AS PWOSFROM
            , EVLAB1 AS STATIONFROM
         FROM CLOCFILEOT.CKEVNHM2
            ,
            (
               SELECT DISTINCT CONCAT('0', WADOCO) AS WOS
               FROM CPJDDTA81.F4801, CPJDDTA81.F4102
               WHERE IBITM = WAITM
                  AND WASRST IN( '30', '45' )
                  AND IBSRP4 IN( 'ECT' )
                  AND WAMMCU = '      ECT001'
            ) AS SELECTEDWOS
            WHERE EVLEV1 = WOS
               AND EVLAB1 = 'E500'
      ) AS ORIGINALWOS
      WHERE IBITM = WAITM
         AND WAPARS = PWOSFROM
         AND IBSRP4 = 'CAB'
         AND WAMMCU = '      STH001'
) AS SELECTEDWOS
LEFT JOIN CLOCFILEOT.CKEVNHM2 ON SELECTEDWOS.WOSTO = CLOCFILEOT.CKEVNHM2.EVLEV1
WHERE CLOCFILEOT.CKEVNHM2.EVLEV1 IS NULL
于 2012-06-20T19:50:16.887 に答える