我有两个我希望结合的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
我在adodb vba中这样做,这有时会限制所使用的sql命令的类型。
提前致谢。
答案 0 :(得分: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
)
答案 1 :(得分: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>)
答案 2 :(得分: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