2

我有一个查询,我必须修改它以满足一些新规范:

查询的大图如下:

在此处输入图像描述

我有几个内部联接组成结果集INNER JOINS,然后该结果集首先是LEFT JOINEDA1然后是SCH。这是查询的当前状态。

现在,我要做的是添加另一个(黄色部分) result setA2common part of A1 and A2在 GROUP BY 中显示具有当前条件的记录。

我的问题是我仍然必须在蓝色区域中显示一些记录(这在初始集合中很常见,但在我添加的新集合中并不常见)。

我不知道如何引用蓝色区域中的那些记录并将它们过滤掉(选择仅满足一个条件的记录),而不过滤来自A2. 我不知道要使用什么样的 JOIN A2(我想我应该使用INNER JOIN,但我不确定,这就是为什么?我的图表上有一个标记)。

FILTER blue -> ALL yellow

4

2 回答 2

3

我不知道您是否尝试在一个查询中完成所有操作,或者是否有可能。否则我认为你应该使用类似的查询

SELECT your,fields 
FROM (table/subquery)
WHERE keyfield
IS NOT IN (table/subquery)

选择数据的蓝色部分

于 2013-10-25T07:30:15.957 回答
2

根据你的图表,你想要这样的东西:

SELECT * FROM InnerJoins -- whatever the previous inner joins are
INNER JOIN A1 ON A1.Key = InnerJoins.Key
INNER JOIN SCH ON SCH.Key = InnerJoins.Key
-- Do all inner joins up to here
-- the statement up to here includes the blue and yellow areas only
LEFT OUTER JOIN A2 ON A2.Key = InnerJoins.Key
-- this still includes the blue and yellow areas combined
WHERE A2.Key IS NULL
-- now we are excluding the yellow area as we are asking for the bits where we have no match in A2.
于 2013-10-25T07:34:54.963 回答