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

解決済みの質問

ポスグレ レコードの比較

ポスグレDBで以下のような二つのテーブルがあって
レコード数、カラム等の構造も同じだったとして
カラム1の値が二つのテーブルで同じであり
カラム2~4のうちどれか一つでも違うレコードを抽出するSQLがわかりません。

下記の例で言うと抽出結果がスキーマA.テーブルAの「←」のレコードを抽出したいです。

スキーマA.テーブルA
カラム1|カラム2|カラム3|カラム4|
---------------------------
A |aaaaaaa|bbbbbb|ccccccc
---------------------------
B |aaaaaaa|bbbbbb|ccccccc      ←
---------------------------
C |aaaaaaa|bbbbbb|ccccccc      ←
---------------------------
D |aaaaaaa|bbbbbb|ccccccc      ←
---------------------------
E |aaaaaaa|bbbbbb|ccccccc

スキーマB.テーブルB
カラム1|カラム2|カラム3|カラム4|
---------------------------
A |aaaaaaa|bbbbbb|ccccccc
---------------------------
B |1111111|bbbbbb|ccccccc
---------------------------
C |aaaaaaa|777777|ccccccc
---------------------------
D |2222222|bbbbbb|8888888
---------------------------
E |aaaaaaa|bbbbbb|ccccccc

よろしくお願いします。

投稿日時 - 2012-11-02 01:02:53

QNo.7777559

すぐに回答ほしいです

質問者が選んだベストアンサー

SELECT *
FROM スキーマA.テーブルA a, スキーマB.テーブルB b
WHERE a.カラム1 = b.カラム1
AND (a.カラム2 <> b.カラム2 OR a.カラム3 <> b.カラム3 OR a.カラム4 <> b.カラム4)

こんな感じでいかがでしょうか。

投稿日時 - 2012-11-02 01:47:15

お礼

ありがとうございます。できました。

投稿日時 - 2012-11-06 22:51:21

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

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

回答(2)

ANo.2

existsを使って、

select *
from スキーマA.テーブルA A
where exists (
select *
from スキーマB.テーブルB B
where A.カラム1 = B.カラム1
and (A.カラム2 <> B.カラム2 or A.カラム3 <> B.カラム3 or A.カラム4 <> B.カラム4)
);

でもいいと思います。

投稿日時 - 2012-11-02 09:02:00

お礼

yamada_gさんの教えてくださった方法でも結果が得られたのですが時間差ということで今回はNo1の回答をベストアンサーにさせていただきました。ありがとうございました。

投稿日時 - 2012-11-06 22:53:07

あなたにオススメの質問