В этом запросе я не понимаю:

Что такое p1.Person и p2.Person

Это картинка

1 ответ1

0

Как указал 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 (Использование таблицы дважды в одном запросе), содержит дополнительную информацию о значении самостоятельного объединения.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .