我有一个查询,我必须修改以满足一些新的规范:
查询的大图如下:
我有一些INNER JOINS构成INNER JOINS
的结果集,然后结果集首先是LEFT JOINED
A1
,然后是SCH
。这是查询的当前状态。
现在,我要做的是为result set
(黄色部分)添加anoter A2
,common part of A1 and A2
,以显示GROUP BY中当前条件的记录
我的问题是我仍然需要在蓝色区域显示一些记录(这些记录与初始设置相同,但与我添加的新设置不相同)。
我不知道如何重新引用蓝色区域中的记录并将它们过滤掉(选择仅满足一个条件的记录),而不过滤A2
中的记录。我不知道A2
使用什么类型的JOIN(我想我应该使用INNER JOIN
,但我不确定,这就是我的图表上有?
标记的原因)
FILTER blue -> ALL yellow
答案 0 :(得分:3)
我不知道您是否尝试在一个查询中完成所有操作,或者即使可能。否则我认为你应该使用像
这样的查询SELECT your,fields
FROM (table/subquery)
WHERE keyfield
IS NOT IN (table/subquery)
选择数据的蓝色部分
答案 1 :(得分: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.