表Arc(x,y)
目前有
跟随元组(注意有
重复):
(1,2),
(1,2),
(2,3),
(3,4),
(3,4),
(4,1),
(4,1),
(4,1),
(4,2)
计算查询结果:
SELECT a1.x, a2.y, COUNT(*)
FROM Arc a1, Arc a2
WHERE a1.y = a2.x
GROUP BY a1.x, a2.y;
a1
和a2
指的是什么?
答案 0 :(得分:7)
a1和a2只是正在连接到自身的Arc表的别名。你也可以说,
Arc As a1, Arc As a2
这就是你问的问题吗?
答案 1 :(得分:4)
它被称为self join
。
您可以与自己一起加入表格,就像在您的任务中一样,它会导致:
(1, 2) (2, 3) // note the join condition, y from the right is equal to x from the left
(1, 2) (2, 3)
(2, 3) (3, 4)
(2, 3) (3, 4)
...
等
这当然会在GROUP
之后缩小。
a1
和a2
引用该表的实例。您想要x
的结果部分?左侧部分使用a1.x
,右侧部分使用a2.x
。
答案 2 :(得分:0)
查询的答案是:
create temp table arc(x int, y int);
insert into arc values(1,2);
insert into arc values(1,2);
insert into arc values(2,3);
insert into arc values(3,4);
insert into arc values(3,4);
insert into arc values(4,1);
insert into arc values(4,1);
insert into arc values(4,1);
insert into arc values(4,2);
SELECT a1.x, a2.y, COUNT(*)
FROM Arc a1, Arc a2
WHERE a1.y = a2.x
GROUP BY a1.x, a2.y;
4 3 1
4 2 6
2 4 2
1 3 2
3 1 6
3 2 2
但这不一定是问题的答案。如前所述,'a1'和'a2'是表别名,是Arc表的替代名称,因此它可以连接到自身。