Пожалуйста, помогите объяснить этот оператор SQL - PullRequest
0 голосов
/ 13 февраля 2009

Таблица 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?

Ответы [ 3 ]

7 голосов
/ 13 февраля 2009

a1 и a2 - просто псевдонимы для таблицы Arc, которая присоединяется к себе. Вы также можете сказать,

Arc As a1, Arc As a2

Это то, что вы спрашиваете?

4 голосов
/ 13 февраля 2009

Это называется 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 'ing.

a1 и a2 относятся к экземплярам таблицы. Из какой части результата вы хотите x? Используйте a1.x для левой части, a2.x для правой части.

0 голосов
/ 13 февраля 2009

Ответ на запрос:

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, чтобы ее можно было присоединить к себе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...