0

例として、テーブルがある場合:

DECLARE @tmpTable TABLE
( SectionID INT,
  DetailID INT)

私は次のデータを持っています:

SectionID    DetailID
1000          -1
1000           0
1000          -1
1100          5000
1100          0
1200          0
1200          0
1300          7000
1300          8000

すべての詳細IDが0または-1であるすべてのセクションIDを取得するSQLを作成するにはどうすればよいですか。上記の例では、SQLは1000と1200を返す必要があります(少なくとも1つの項目は0または-1ではないため、1100ではありません)

4

2 に答える 2

3
SELECT DISTINCT SectionID
FROM @tmpTable AS t
WHERE NOT EXISTS
      ( SELECT *
        FROM @tmpTable AS tt
        WHERE tt.SectionID = t.SectionID
          AND tt.DetailID NOT IN (-1, 0)
      )

DetailIDは整数であり、チェックしている値(-10)にはギャップがないため、これも機能するはずです。そして、インデックスを付ければ、より速くなる可能性があります(SectionID, DetailID)

SELECT SectionID
FROM @tmpTable AS t
GROUP BY SectionID
HAVING MAX(DetailID) <= 0
   AND MIN(DetailID) >= -1
于 2012-04-06T19:44:07.947 に答える
0
select sectionId from mytable where detailId in (0,-1)
and section id not in (select sectionid from mytable where detail_id > 0)
于 2012-04-06T19:40:24.683 に答える