アプリ版:「スタンプのみでお礼する」機能のリリースについて

ポスグレ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

よろしくお願いします。

A 回答 (2件)

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)

こんな感じでいかがでしょうか。
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/11/06 22:51

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)
);

でもいいと思います。
    • good
    • 1
この回答へのお礼

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

お礼日時:2012/11/06 22:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!