0

私はこのようなテーブルにいる必要があります

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

この表は、残りの月と年を示しています。ここで、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 が null の場合、現在のカウントを取得していますが、Other テーブルに 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}が1 つあることを前提としています。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 に答える