0

我必须要一张这样的桌子

Year Month
2012  8
2012  7
2012  4
2012  3
2011  7
2011  3
2011  1
2010  10
2010  9
2010  8

这张表显示了哪个月份和年份是remaning,现在假设我已经完成了 2012 年,第 7 个月。现在我想要像这样的列表

Year Month
    2012  8
    2012  4
    2012  3
    2011  7
    2011  3
    2011  1
    2010  10
    2010  9
    2010  8

我正在使用以下查询,但这并没有给我正确的记录

SELECT YEAR, MONTH from tablex
WHERE Year NOT IN (SELECT DISTINCT YEAR from OTHER_TABLE INNER JOIN Some_Other_Table)
AND  MONTH NOT IN (SELECT DISTINCT MONTH FROM OTHER_TABLE INNER JOIN Some_Other_Table)

当 OTHER_TABLE 为空时,我得到了当前计数,但是当其他表有 2012 年和第 7 个月时,我没有得到任何结果。

PS:tablex 和 OTHER_TABLE 和 Som_Other_Table 没有可用的连接列

4

2 回答 2

2

你只需要使用NOT EXISTS

SELECT YEAR, MONTH 
from tablex t1 
WHERE NOT EXISTS
(
    SELECT 1 FROM OTHER_TABLE t2
    WHERE t2.Year = t1.Year AND t2.Month = t2.Month 
)
于 2012-11-08T16:00:02.800 回答
2

此答案假设您有一行{Year = 2012, Month = 7}OTHER_TABLE指定完成的月份。

这不起作用,因为您要分别检查年份和月份。因此,您没有从结果中删除行 (2012, 7),而是删除了 Year = 2012 的所有行和 Month = 7 的所有行。试试这个反连接:

SELECT x.YEAR, x.MONTH
FROM tablex x
LEFT OUTER JOIN OTHER_TABLE y ON x.YEAR = y.YEAR AND x.MONTH = y.MONTH
WHERE y.YEAR IS NULL
于 2012-11-08T16:00:17.140 回答