4

2 つのテーブルがあるとします (各テーブルの行は異なります)。

 1)  x | y     z   2)  x | y     z
    -------   ---     -------   ---
     1 | a     a       1 | a     a
     1 | b     b       1 | b     b
     2 | a             1 | c
     2 | b             2 | a
     2 | c             2 | b
                       2 | c

その列xの値のサブセットが2 番目のテーブルの列の値と正確に一致する最初のテーブルの列の値を選択する方法はありますか?yxz

の場合1)、期待される結果は1です。cを 2 番目のテーブルに追加すると、期待される結果は になります2
の場合、最初のテーブルのサブセットが 2 番目のテーブルのサブセットと一致しない2)ため、予想される結果はです。を 2 番目のテーブルに追加すると、期待される結果は になりno recordます。c1, 2

最初のテーブルのサブセットを 2 番目のテーブルと比較して正常に動作するようにしようとしましexceptintersectが、時間がかかりすぎintersectて理由がわかりません (最初のテーブルには約 10.000 レコードがあり、2 番目のテーブルには約 10.000 レコードがあります)。 10)。

編集:追加のシナリオを提供するために質問を更新しました。

4

2 に答える 2

7
SELECT
  table1.x
FROM
  table1
INNER JOIN
  table2
    ON table1.y = table2.z
GROUP BY
  table1.x
HAVING
      COUNT(*) = (SELECT COUNT(*) FROM table2 AS lookup)
  AND COUNT(*) = (SELECT COUNT(*) FROM table1 AS lookup WHERE x = table1.x)
于 2012-07-11T13:21:15.313 に答える
1

これらのうちの1つが行います

select
    t1.x
from 
    table1 as t1 inner join table2 as t2 on t1.x=t2.x
group by t1.x
having count(distinct t1.x)=count(distinct t2.x)

select
    t1.x
from 
    table1 as t1 inner join table2 as t2 on t1.x=t2.x
group by t1.x
having count(distinct t1.x)=(select count(distinct x) from table2)
于 2012-07-11T13:19:39.433 に答える