アクセスデータベース
table contacts
--------------
id
surname
name
table relations
---------------
contact_id
relation_id
contact_idとrelation_idはどちらも、テーブルの連絡先のIDを参照する外部キーです。
現在の連絡先のリレーションが存在する場合は、クエリを実行して、連絡先の名前/名前とリレーションの名前/名前の両方を取得したいと思います。存在しない場合は、連絡先の名前/名前と、リレーションのフィールドの空白の値を取得します。
このすべてを1つのクエリで
編集:
左結合を使用しました。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が発生します:Join式はサポートされていません。
彼らは別の投稿で次のように述べています。「FROM句でLEFT/RIGHT / INNER JOINSを使用する場合、Accessではwhere句で従来の結合を使用できません。おそらくより高価なソフトウェアを購入することを意図しています。」-(結合式はMS Accessでサポートされていませんか?)
正確にはそうではありません。私が試したいくつかの例から、次のような結論に達しました。
Accessでは、外部結合(LEFT / RIGHT)を1つ以上の内部結合と一緒に使用することはできません。ジョン・カーマックの名前で私は何ができますか?個別のselectクエリは避けたいと思います。助けてください...