Como o mcalex apontou que são referências de tabela, neste caso eles estão referenciando a mesma tabela duas vezes, quando ela é unida a si mesma. O Person
bit contém o nome da pessoa (de acordo com o gráfico).
A consulta é a seguinte:
SELECT p1.Person AS PERSON, p2.Person AS FRIEND_OF_FRIEND
FROM PersonFriend pf1
JOIN Person p1 ON pf1.PersonID = p1.ID
JOIN PersonFriend pf2 ON pf2.PersonID = pf1.FriendID
JOIN Person p2 ON pf2.FriendID = p2.ID
WHERE p1.Person = "Alice" and pf2.FriendID <> p1.ID
Analise cuidadosamente cada menção de uma tabela na cláusula FROM
. Você poderá ver que em cada menção há uma abreviação atribuída (por exemplo, JOIN Person
p1
). Você acaba com os seguintes nomes abreviados / de referência: p1
, p2
, pf1
e pf2
. Enquanto p1
e p2
referenciam a tabela Person
, pf1
e pf2
reference PersonFriend
.
Em circunstâncias normais, você pode usar todo o nome de uma tabela como Person
ou PersonFriend
no JOINS
, mas como há várias associações automáticas nessa consulta, você precisa de outra maneira de identificar quais campos de instância específica das tabelas que você quer dizer.
Editar: A referência fornecida pelo mcalex ( Usando uma tabela duas vezes em uma consulta ) mais algumas informações sobre o significado de uma auto-união.