みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

access・複数のテーブル・重複除外したデータ

accessで複数のテーブルで重複しないレコードだけを抽出するSQL文を知りたいです。
フィールドは多数あり、「フィールドの内容が全て一致するレコード」以外のレコードを
重複しないレコードとして抽出したいと思っています。
テーブルは3つ以上ありますが、2つのテーブルで実行するSQL文でかまいません。

投稿日時 - 2015-07-07 09:39:56

QNo.9007667

困ってます

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(6)

ANo.6

各フィールドが異なることを評価し(○ or ×)、○で抽出し、
複数テーブルがある場合は、UNION ALL もしくはUNIONで
くっつけます。

SELECT [テーブルA].[フィールド1], [テーブルA].[フィールド2]
FROM テーブルA
WHERE (((IIf([フィールド1]<>[フィールド2],"○","×"))="○"))
UNION ALL SELECT [テーブルB].[フィールド1], [テーブルB].[フィールド2]
FROM テーブルB
WHERE (((IIf([フィールド1]<>[フィールド2],"○","×"))="○"));

投稿日時 - 2015-07-10 12:14:30

ANo.5

一つのSQLで記述するなら、

SELECT F1, F2 FROM
(SELECT * FROM テーブル1
UNION ALL
SELECT * FROM テーブル2
) AS Q1
GROUP BY F1, F2
HAVING Count(*)=1;

投稿日時 - 2015-07-08 10:43:53

ANo.4

補足:クエリのデザイン

投稿日時 - 2015-07-07 13:15:32

ANo.3

SELECT DISTINCTROW [couple union all query].id, [couple union all query].couple_id, [couple union all query].name, [couple union all query].sex, [couple union all query].age, Count(*) AS [couple union all queryのカウント]
FROM [couple union all query]
GROUP BY [couple union all query].id, [couple union all query].couple_id, [couple union all query].name, [couple union all query].sex, [couple union all query].age
HAVING (((Count(*))=1));

レコードのカウント数が1のみを抽出すれば・・・。

投稿日時 - 2015-07-07 12:09:54

ANo.2

> おっしゃる通り「重複しているレコードはすべて出力しない」ようにしたいです。

テーブル1
F1  F2
--------------
001 AAA
002 BBB
003 CCC
005 DDD

テーブル2
F1  F2
--------------
001 AAA
002 BBB
004 EEE
005 DDD

だとしたら、下記の2件を抽出したいということでしょうか。
F1  F2
--------------
003 CCC
004 EEE

ならば、まず、下記のユニオンクエリを作成してます。

SELECT * FROM テーブル1
UNION ALL
SELECT * FROM テーブル2;

このクエリを保存して、このクエリを元に集計クエリを作成して、
すべてのフィールドをグループ化します。
さらに下記のフィールドを追加します。

フィールド F1
集計    カウント
表示    □
抽出条件  =1

以上。

投稿日時 - 2015-07-07 11:28:27

ANo.1

複数のテーブルのフィールド構成はすべて同じですか。
で、「フィールドの内容が全て一致するレコード」は1レコードとして表示するということですか。

そういうことなら、ユニオンクエリで可能です。ユニオンクエリはSQLで記述する必要があたますので、クエリのSQLビューで下記のように記述してください。

SELECT * FROM テーブル1
UNION
SELECT * FROM テーブル2;

これで重複のない結果が出力されます。

3つのテーブルでも追加していくだけです。

SELECT * FROM テーブル1
UNION
SELECT * FROM テーブル2
UNION
SELECT * FROM テーブル3;

それとも重複しているレコードはすべて出力しない、ということなのかな。
もし、そうなら補足してください。

投稿日時 - 2015-07-07 10:38:26

補足

ありがとうございます。
複数のテーブルのフィールド構成はすべて同じです。
おっしゃる通り「重複しているレコードはすべて出力しない」ようにしたいです。

投稿日時 - 2015-07-07 10:58:33

あなたにオススメの質問