В этом запросе я не понимаю:
Что такое p1.Person
и p2.Person
Как указал mcalex, они являются ссылками на таблицы, в этом случае они ссылаются на одну и ту же таблицу дважды, когда она соединяется с собой. Бит Person
содержит Имя человека (согласно графику).
Запрос следующий:
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
Внимательно изучите каждое упоминание таблицы в предложении FROM
. Вы сможете увидеть, что при каждом упоминании назначается сокращение (например, JOIN Person
p1
). В итоге вы получите следующие сокращенные имена / ссылки: p1
, p2
, pf1
и pf2
. В то время как p1
и p2
ссылаются на таблицу Person
, pf1
и pf2
ссылаются на PersonFriend
.
При нормальных обстоятельствах , вы можете использовать полное имя таблицы , как Person
или PersonFriend
в JOINS
, но , как Есть несколько самостоятельно присоединяется в этом запросе вам нужен другой способ определить , какие поля из которых конкретного экземпляр таблиц вы имеете в виду.
Редактировать: ссылка, предоставленная mcalex (Использование таблицы дважды в одном запросе), содержит дополнительную информацию о значении самостоятельного объединения.