假设在表格“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窗体表格
- 2. SQL加入3个表格
- 3. Sql加入4个表格列1
- 4. 加入3个表格并过滤SQL
- 5. MS SQL自己加入表格
- 6. SQL需要帮助加入表格
- 7. 如何加入3 sql表格
- 8. 在Oracle SQL Developer中加入表格
- 9. SQL - 加入表格并显示“空”值
- 10. 加入SQL中的多个表格
- 11. 加入表格时的SQL聚合
- 12. 已加入表格的SQL行连接
- 13. 加入SQL表
- 14. SQL加入表
- 15. SQL:加入表
- 16. 加入SQL表?
- 17. SQL加入wordpress表
- 18. SQL加入2表
- 19. SQL 3表加入
- 20. SQL加入2表
- 21. SQL三表加入
- 22. 加入3 SQL表
- 23. SQL - 多表加入
- 24. cakephp - 加入表格
- 25. PHP SQL - 插入表格
- 26. 加入3个表sql加入
- 27. 已加入表格的联接表格
- 28. 加入子表格和父表格
- 29. SQL:从一张表中加入两个不同行的表格
- 30. 加入两个SQL表
看起来像一个糟糕的模式设计。 – 2010-12-14 22:38:44
+1 @Mark Byers - 赞同!! – exodream 2011-06-13 00:58:14