Доступ к базе данных
table contacts
--------------
id
surname
name
table relations
---------------
contact_id
relation_id
И contact_id, иrence_id являются внешними ключами, на которые ссылается идентификатор таблицы контактов
Я хочу выполнить запрос, чтобы получить как фамилию / имя контакта, так и фамилию / имя отношения , если существует отношение для текущего контакта . Если он не существует, я хочу получить фамилию / имя контакта и пустые значения для полей отношения.
Все это в одном запросе
EDIT:
Я использовал левое соединение. Я выполняю запрос с использованием VB.NET:
Dim myOleDbDataReader As OleDbDataReader = _
New OleDbCommand( _
"SELECT c.id AS contact_id " & _
" , c.surname AS contact_surname " & _
" , c.name AS contact_name " & _
" , c2.id AS related_id " & _
" , c2.surname AS related_surname " & _
" , c2.name AS related_name " & _
"FROM ((contacts c " & _
"LEFT JOIN relations r " & _
"ON c.id = r.contact_id) " & _
"INNER JOIN contacts c2 " & _
"ON c2.id = r.relation_id)" _
, connection).ExecuteReader()
Я получаю OleDbException: выражение соединения не поддерживается.
В другом посте говорится, что:
«Доступ не позволит вам использовать обычные объединения в предложении where, когда вы используете LEFT / RIGHT / INNER JOINS в предложении FROM. Вероятно, это намеренно заставить вас покупать более дорогое программное обеспечение» - ( Выражение соединения не поддерживается MS Access? )
Это не совсем так. Из некоторых примеров, которые я попробовал, я пришел к выводу, что:
Доступ не позволит использовать внешние соединения (ВЛЕВО / ВПРАВО) вместе с одним или несколькими ВНУТРЕННИМИ СОЕДИНЕНИЯМИ .
Что на имя Джона Кармака я могу сделать?
Я хотел бы избежать отдельных запросов выбора.
Пожалуйста, помогите ...