2

我有两个要合并的 sql 语句。我确信这可以使用某种连接命令来完成,但我不太擅长使用它们,所以我希望有人能从这里提供帮助。

我想从:

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

我在 adodb vba 中这样做,它有时会限制使用的 sql 命令的类型。

提前致谢。

4

3 回答 3

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

在第一个查询中...我不确定您为什么要进行交叉联接并与其中一个表不同。您可以完全消除第二个表。如果您想要更好的答案.. 您必须让我们知道这些列来自哪个表。

您可以左加入并查找空值

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 回答