如何用SQL解决这个问题?

时间:2013-10-25 07:19:35

标签: sql

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

查询的大图如下:

enter image description here

我有一些INNER JOINS构成INNER JOINS的结果集,然后结果集首先是LEFT JOINED A1,然后是SCH。这是查询的当前状态。

现在,我要做的是为result set(黄色部分)添加anoter A2common part of A1 and A2,以显示GROUP BY中当前条件的记录

我的问题是我仍然需要在蓝色区域显示一些记录(这些记录与初始设置相同,但与我添加的新设置不相同)。

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

FILTER blue -> ALL yellow

2 个答案:

答案 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.