请帮忙解释一下这个SQL语句

时间:2009-02-13 18:47:33

标签: sql

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;

a1a2指的是什么?

3 个答案:

答案 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之后缩小。

a1a2引用该表的实例。您想要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表的替代名称,因此它可以连接到自身。