假设你的意思是你想从结果中的所有记录从查询2不在结果从查询1,一个快速简便的方法是使用EXCEPT
:
[Query 2]
EXCEPT
[QUERY 1]
具体做法是:
SELECT DISTINCT GENG.GlGroup
FROM RPZCGenGroup GENG
EXCEPT
SELECT GENG.GlGroup
FROM MCMGenHistory GENH
RIGHT OUTER JOIN RPZCGenGroup GENG
ON GENG.ExpenseCode = substring(GENH.GlCode,13,3)
WHERE SUBSTRING(GENH.GlCode,1,1)='P'
你可能不希望使用DISTINCT
在第二个查询要么因为它可能会降低性能和h对结果没有影响。
更多文档:EXCEPT and INTERSECT @ MSDN
看起来你真想要的是什么RPZCGenGroup没有任何匹配的记录MCMGenHistory有与'开始GlCode所有记录P”。这样做的快速和容易的版本是使用NOT EXISTS
:
SELECT GENG.GlGroup
FROM RPZCGenGroup GENG
WHERE NOT EXISTS (
SELECT
FROM MCMGenHistory GENH
WHERE substring(GENH.GlCode,13,3) = GENG.ExpenseCode
AND SUBSTRING(GENH.GlCode,1,1)='P'
)
的NOT EXISTS
性能很可能是一个问题,所以你可以/应该用适当的外更换连接(注@ Love2Learn的评价太):
SELECT GENG.GlGroup
FROM RPZCGenGroup GENG
LEFT OUTER JOIN MCMGenHistory GENH
ON substring(GENH.GlCode,13,3) = GENG.ExpenseCode
AND SUBSTRING(GENH.GlCode,1,1)='P'
WHERE GENH.GlCode IS NULL
这是不是真的清楚自己想要什么。如果第一个查询返回你想要的结果,那么问题是什么? - 也许提供更多关于预期结果的细节? – 2013-04-08 14:24:33