假设在表格“ab”中,我有从“a”类和“b”类相处的学生的名字,同样我有表“ac”和“bc”。我应该使用什么SQL查询来获得可以形成组的学生的所有组合(即“相处融洽”)?我该如何将它扩展到n个类? 例如:来自A班的John会与B班的Jen和C班的Steff相处,Jen和Steff会相处。因此,约翰,仁和斯蒂夫可以组成一个组)。加入SQL表格
Q
加入SQL表格
1
A
回答
0
此查询应该返回所有可以与约翰组在一个组中的所有学生。
WITH ABC AS (SELECT AB.A, AB.B, AC.C FROM (SELECT * FROM AB
INNER JOIN BC
ON AB.B=BC.B)
INNER JOIN AC
ON (AC.C=BC.C AND AB.A=AC.A))
SELECT STUDENT FROM (
SELECT AB.B STUDENT FROM ABC WHERE AB.A='John'
UNION
SELECT AC.C STUDENT FROM ABC WHERE AB.A='John')
GROUP BY STUDENT
PS:写快,没有任何语法检查,希望你能够把这个工作:)
1
为此,我将创建两个表,一个学生表(ID,姓名,类)和关系表(student1,student2)。您可能还想为班级的时间,地点等添加班级表。
一个友谊会有两个关系(2,3)和(3,2)来形容它是双向的。一种方式可能是另一名学生的追随者或粉丝。 这可以扩展到3班以上。
然后,您可以使用多个连接来获得朋友的朋友等等以任意深度。
下面是一个查询来获取的朋友(FOF)的朋友:
SELECT fof_details.*
FROM relationships r
INNER JOIN relationships fof
ON r.student2 = fof.student1
INNER JOIN student fof_details
ON fof_details.id = fof.student2
WHERE r.student1 = '12';
也有专门做图建模作出这样的数据库引擎。
0
初始查询可以通过代码
select ab.a, ab.b, ac.c
from
ab inner join
bc on ab.b = bc.b inner join
ac on ac.a = ab.a and bc.c = ac.c
加紧N个类别满足将获得正越来越复杂= 4将与另外三个同样的查询连接
inner join ad on ab.a = ad.a
inner join bd on bd.b = ab.b and ad.d = bd.d
inner join cd on cd.c = ac.c and ad.d = cd.d
2类要求1个表和没有连接,
3班需要3代表一ND 2连接,
4类需要6张桌子和5加入
所以我们可以看到它变得越来越复杂,因为我们继续
0
首先,你不希望有一个表中的每个类。您正在多个表中捕获相同类型的信息,这通常被认为是不好的做法。你想“规范化”你的数据,以便在同一个地方存在相同的数据。
其次,适当地命名您的表,以便您了解实际尝试构建的内容。也许你总是想通过在问题中使用“ab”来掩盖你对实际实现的意图,但是如果你在你的实际代码中这样做,它将会长期伤害你。
看来你需要的名字一个人表以及您跟踪谁是朋友,谁一个朋友表:
create table people (id int, name char(128));
create table friends (id int, person_id int, friend_id int);
然后你只需要具备查询来获取组:
SELECT person.* FROM friends
INNER JOIN friends grp
ON friends.friend_id = grp.person_id
INNER JOIN people person
ON person.id = grp.friend_id
WHERE friends.person_id = 42;
相关问题
- 1. SQL加入3个表格
- 2. MS SQL自己加入表格
- 3. 加入3个表格并过滤SQL
- 4. 加入表格时的SQL聚合
- 5. 已加入表格的SQL行连接
- 6. SQL需要帮助加入表格
- 7. 加入SQL表?
- 8. 加入SQL表
- 9. SQL:加入表
- 10. SQL加入2表
- 11. SQL三表加入
- 12. SQL加入wordpress表
- 13. cakephp - 加入表格
- 14. 加入3个表sql加入
- 15. 加入子表格和父表格
- 16. 右加入表本身SQL
- 17. 加入2个表SQL
- 18. SQL加入更新表
- 19. SQL - 加入两个表
- 20. 加入在SQL三个表
- 21. 的Sql加入一个表
- 22. Oracle SQL加入两个表
- 23. SQL加入3个表
- 24. 加入多个SQL表
- 25. SQL表加入合并
- 26. SQL表加入的问题
- 27. SQL多表加入SUM
- 28. SQL加入表行数据
- 29. T-SQL:加入两张表
- 30. SQL计数加入单表
看起来像一个糟糕的模式设计。 – 2010-12-14 22:38:44
+1 @Mark Byers - 赞同!! – exodream 2011-06-13 00:58:14