2012-01-07 14 views
1

情報の照合順序を最適化するために最大4つのテーブルを照会するクエリをMS Accessで作成しようとしています。ビューをクリックすると
私はエラーが表示されます。Microsoft Access 2007 - 複数のテーブルを照会するとエラーが発生する

Syntax error (missing operator) in query expression sessions.sessionTypeFK=session_type.session_type.id) inner join staff on (sessions.StaffFK=staff.staff_id) inner join person on (staff.FK_personID=person.personID'

は、興味深いことに、それは常にエラーの最後のブラケットをオフにミス?

SELECT sessions.*, session_type.[Session Type],forename,surname 
from sessions 
inner join session_type on (sessions.SessionTypeFK=session_type.session_type_id) 
inner join staff on (sessions.StaffFK=staff.Staff_ID) 
inner join person on (staff.FK_PersonID=person.PersonID) 

私はMSのアクセスがあいまいであることを知っている、とあなたが内部をラップする必要があり、それが仕事を得るために()に参加し、私はいくつかの他のクエリでこれを行っているが、純粋にこのビットは解析され得るのに苦労しています。

答えて

0

あなたが意味するか:

SELECT sessions.*, session_type.[Session Type],forename,surname 
from ((sessions 
inner join session_type on sessions.SessionTypeFK=session_type.session_type_id) 
inner join staff on sessions.StaffFK=staff.Staff_ID) 
inner join person on staff.FK_PersonID=person.PersonID 

なぜAccessクエリのデザインウィンドウを使用して、サンプルのSQLを取得するために、SQLビューに切り替えていませんか?

+0

ありがとうございました。マイクロソフトが独自のものを発明した場合、スタンダードに固執するのではなく、それほど簡単です。 – Trabumpaline

0

彼らはすべての内部結合であるため、あなたはこのように見えるようにクエリデザイナを使用せずに、より簡単な形式でクエリを書き直すことができます:あなたは外部結合で作業していない限り

SELECT S.*, T.[Session Type], P.Forename, P.Surname 
FROM Sessions As S, Session_Type As T, Staff As F, Person As P 
WHERE T.Session_Type_ID = S.SessionTypeFK 
AND F.Staff_ID = S.StaffFK 
AND P.PersonID = F.FK_PersonID 

をWHERE句でテーブルをリンクすると、読みやすくなります。また、テーブル名にエイリアスを使用していることに気付くかもしれません.SQLを書くのが簡単になり、大きなSQLを書く場合や長いテーブル名を持つ場合には、コードを大幅に縮小できます。

+0

暗黙的な結合が良いアイデアであるとは確信しています。「...クロス結合の望ましくない可能性があります:対応するWHERE句を持たないFROM部分にテーブルを追加できます。 - http://stackoverflow.com/questions/44917/explicit-vs-implicit-sql-joins – Fionnuala

+0

@Remou Fair point、このようにSQLを記述することで、人々がSQLコンピテンシーになることが奨励されます(クエリーデザイナー一部のケースでは不安定になる可能性があるため)、使用しない方法について学びます。 –

関連する問題