3

Access 2003 には 3 つのクエリがあり、それらを 1 つのクエリに結合する必要があります。3 つのテーブルすべてにすべてのレコードが存在するわけではないので、完全外部結合のようなものが必要だと思います。

クエリ 1 フィールド: Record number, surname, firstname, subcentre

クエリ 2 フィールド: Record number, surname, firstname, case worker

クエリ 3 フィールド: Record number, surname, firstname, doctor

表示できるようにする必要があります:

Record number, surname, firstname, case worker, doctor, subcentre

ただし、現時点では、左結合を使用してから、2 つのクエリ間で右結合と結合する方法を試すことができますが、これを 3 つのクエリに拡張する方法はわかりません。

アイデア/提案はありますか?

4

1 に答える 1

3

どうですか:

SELECT a.[Record number], a.surname, a.firstname, 
       t1.subcentre, t2.[case worker], t3.doctor
FROM
(((SELECT [Record number], surname, firstname FROM T1
UNION
SELECT [Record number], surname, firstname FROM T2
UNION
SELECT [Record number], surname, firstname FROM T3) As A
LEFT JOIN T1 ON A.[Record number]=T1.[Record number])
LEFT JOIN T2 ON A.[Record number]=T2.[Record number])
LEFT JOIN T3 ON A.[Record number]=T3.[Record number]

クエリで UNION ALL ではなく UNION を使用すると、[Record number], surname, first name3 つのテーブルすべてから取得した一意のリストが作成されます。派生テーブルは、他の 3 つのテーブルへの LEFT JOIN に使用できます。LEFT JOIN により、派生テーブルのすべてのレコードが確実に含まれます。

SQL の場合と同様に、これを行うには他にも同様の方法があります。上記は非常に大きなファイルでは遅くなりますが、Jet/ACE バックエンド以外のものを使用しない限り、遅延に気付くことはほとんどありません。

たとえば、SQL Server バックエンドでは、パススルー クエリと t-sql 構文を使用します。MySQL バックエンドでは、1 つの UNION ステートメントを超える場合、パススルー クエリを使用する必要があると思います。

于 2012-06-24T08:21:18.767 に答える