首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >针对一些通用值分组的两个不同表的SQL查询

针对一些通用值分组的两个不同表的SQL查询
EN

Stack Overflow用户
提问于 2013-08-07 00:02:09
回答 1查看 318关注 0票数 0

我有两个表,一个用于学生/班级,另一个用于学生/兴趣,例如;

代码语言:javascript
复制
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

询问哪些学生只与他的同学有相同的兴趣爱好,最好的方法是什么?最难的部分是只有的要求。

查询结果不应为4135、4136、4140和4141。由于4134和4137具有相同的兴趣,所以他们的兴趣都与4138相同,4138不在1类中。

EN

回答 1

Stack Overflow用户

发布于 2013-08-07 02:24:20

我已经为你的数据创建了两个表-

代码语言:javascript
复制
CREATE TABLE #temp (id INT , class INT)
CREATE TABLE #temp2 (id INT, activity VARCHAR(500))

代码语言:javascript
复制
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 use select statement 

    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)

This will return - 

id
4135
4136
4140
4141
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18085079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档