0

SQL Server (2005) で一部のデータを比較する方法が思いつきません。2 つのテーブルがあり、テーブル 1 の値がテーブル 2 で一致していることを確認する必要があります。テーブル構造といくつかのサンプル データを次に示します。

Table 1 
GenreId
6 

これは、渡される ID のリストを含む一時テーブルです。

Table 2
Show| GenreId
Show1 | 2
Show1 | 6
Show2 | 6

このテーブルには、番組の多くの GenreId を含めることができます。取得方法を理解しようとしている結果は、表 1 の GenreIds のみを持つショーのみが必要であるということです。したがって、最終的に期待される結果は次のようになります。

テーブル 1 に 6 がある場合、Show2 のみが取得されると予想されます。テーブル 1 に 2 と 6 がある場合、Show1 と Show2 が得られます。

これはおそらく単純だと思いますが、実際には空白を描いています。どんな助けでも大歓迎です。

4

6 に答える 6

1

まあ、これはうまくいくはずですが、 が大きいとパフォーマンスが低下する可能性がありTable2ます...

SELECT * FROM Table2 t2
WHERE NOT EXISTS(
    SELECT GenreID 
    FROM Table1
    WHERE GenreID NOT IN (
        SELECT GenreID 
        FROM Table2 
        WHERE Show = t2.Show))
AND NOT EXISTS(
    SELECT GenreID 
    FROM Table2
    WHERE GenreID NOT IN (
        SELECT GenreID FROM Table1)
    AND Show = t2.Show)
于 2013-10-15T20:33:48.937 に答える
1

これはあなたが探しているクエリです:

SELECT SHOW FROM t2
WHERE SHOW NOT IN (
  SELECT SHOW FROM t2
  WHERE genreId NOT IN (6, 2)
)
GROUP BY SHOW
HAVING count(DISTINCT genreId) = 2

これらのクエリは少しトリッキーです。HAVING条項内の数は、条項内のアイテムの AMOUNT と一致する必要があることを考慮してくださいIN

これらの ID を含むテーブルがあれば、次の方法で解決できます。

SELECT SHOW FROM t2
WHERE SHOW NOT IN (
  SELECT SHOW FROM t2
  WHERE genreId NOT IN (
    SELECT genreId FROM t1
  )
)
GROUP BY SHOW
HAVING count(DISTINCT genreId) = (SELECT COUNT(*) FROM t1)

ここでフィドル。

于 2013-10-15T20:25:27.487 に答える
1

テーブル 1 に 6 がある場合、Show2 のみが取得されると予想されます。テーブル 1 に 2 と 6 がある場合、Show1 と Show2 が得られます。

Fiddle デモ(デモは Sql Server 2012 にありますが、クエリは 2005 でも動作するはずです):

select Max([show]) myShow
from T2 join T1
      on T2.GenreId = T1.GenreId
Group by T2.GenreId;
于 2013-10-15T20:35:18.733 に答える
0

私の悪い。私はあなたが今求めていることを理解していると思います。

これ?

select Show from Table2
where genreid in (select genreid from Table1)
except
select Show from Table2
where genreid not in (select Genreid from Table1)
于 2013-10-15T20:44:48.943 に答える
0
select Show from Table2
inner join Table1
on Table1.GenreId = Table2.GenreId
于 2013-10-15T20:29:20.600 に答える
0

このクエリを使用します。番組が選択したジャンルの唯一の番組かどうかをチェックします。

SELECT DISTINCT Show FROM Table2
INNER JOIN Table1 ON Table1.GenreId = Table2.GenreId
AND (SELECT Count(DISTINCT GenreId) FROM Table2 T2 WHERE Table2.Show = T2.Show) = 1
于 2013-10-15T20:29:41.023 に答える