0

たとえば、次のように、学生/クラス用と学生/興味用の2つのテーブルがあります。

studentID   class
---------------------
4134              1
4135              1
4136              1
4137              1
4138              2
4139              2
4140              2
4141              2

studentID   interests
---------------------
4134        basketball
4134        football
4135        basketball
4136        basketball
4137        football
4138        swimming
4138        football
4139        running
4140        tennis
4141        tennis

どの生徒がクラスメートと同じ興味を持っているかを問い合わせる最良の方法は何ですか? 最も難しい部分は、ONLY の要件です。

このクエリは、4135、4136、4140、および 4141 という結果にはなりません。4134 でさえ 4137 と同じ関心を持っているため、それらの関心は両方とも、クラス 1 に含まれない 4138 と同じです。

4

1 に答える 1

0

あなたのデータ用に2つのテーブルを作成しました-

CREATE TABLE #temp (id INT , class INT)
CREATE TABLE #temp2 (id INT, activity VARCHAR(500))


INSERT INTO #temp
SELECT 4134 ,             1   UNION ALL
SELECT 4135 ,             1   UNION ALL
SELECT 4136 ,             1   UNION ALL
SELECT 4137 ,             1   UNION ALL
SELECT 4138 ,             2   UNION ALL
SELECT 4139 ,             2   UNION ALL
SELECT 4140 ,             2   UNION ALL
SELECT 4141 ,             2   

INSERT INTO #temp2 SELECT 4134 , 'basketball' UNION ALL SELECT 4134 , 'football' UNION ALL SELECT 4135 , 'basketball' UNION ALL SELECT 4136 , 'basketball' UNION ALL SELECT 4137 , 'football' UNION ALL SELECT 4138 , 'swimming' UNION ALL SELECT 4138 , 'football' UNION ALL SELECT 4139 , 'running' UNION ALL SELECT 4140 , 'tennis' UNION ALL SELECT 4141 , 'tennis'

AND select ステートメントを使用する

    SELECT DISTINCT t.id id
    FROM   #temp2 t
    INNER JOIN #temp2 t1 ON  t.activity = t1.activity AND t.id <> t1.id 
    INNER JOIN #temp t3 ON t.id = t3.id 
    INNER JOIN #temp t4 ON t1.id = t4.id
    WHERE t3.class = t4.class  AND t.id NOT IN (SELECT DISTINCT te.id id 
       FROM   #temp2 te
       INNER JOIN #temp2 te1 ON  te.activity = te1.activity AND te.id <> te1.id 
       INNER JOIN #temp te3 ON te.id = te3.id 
       INNER JOIN #temp te4 ON te1.id = te4.id
       WHERE te3.class <> te4.class)
これは戻ります-

id
4135
4136
4140
4141

于 2013-08-06T18:24:19.887 に答える