2016-04-29 15 views
1

私は2つのテーブルの両方が同じ2つの列:フィーチャーIDと言語を持っています。フィーチャーIDの言語が変更されたレコードを取り出したいと思います。しかし、問題は、各フィーチャーIDに複数の言語があることです。私のテーブルは次のようになります。SQL:一意でないフィーチャIDを持つ2つのテーブル間の差分を検索しますか?

表1

Feature ID | Language 
------------------------ 
001   | 'en' 
001   | 'es' 
001   | 'pt' 
002   | 'es' 
002   | 'fr' 

表2

Feature ID | Language 
----------------------- 
001   | 'es' 
001   | 'en 
001   | 'fr' 
002   | 'fr' 
002   | 'es' 

私が最初のようなものを試みた:

SELECT a.feature_id, b.feature_id, a.language, b.language 
FROM table 1 a FULL OUTER JOIN table 2 b on a.feature_id = b.feature_id 
WHERE a.language <> b.language 

を私は期待して、これは正確に動作しませんでした。私は次のような結果に気付いています:

002 | 002 | 'fr' | 'es' 
002 | 002 | 'es' | 'fr' 

これを緩和する方法はありますか?

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

+0

どのDBMSを使用していますか? –

答えて

2
SELECT a.feature_id, b.feature_id, a.language, b.language 
FROM [table 1] a FULL OUTER JOIN [table 2] b on a.feature_id = b.feature_id 
    and a.language = b.language 
WHERE a.feature_id is null or b.feature_id is null 

変更は、言語や機能に参加し、一致。

+1

これは私のために働いた、そしてそれはとても簡単です...ありがとう! – Scott

0

TABLE1 LEFT JOIN TABLE2 ONのフィーチャーIDと言語を使用できます。 TABLE2からの言語がNULLの場合、それは変更されます。

0

はこれを試してみてください:

SELECT a.feature_id, b.feature_id, a.language, b.language 
FROM table 1 a FULL OUTER JOIN table 2 b on a.feature_id = b.feature_id 
WHERE a.feature_id || a.language <> b.feature_id || b.language 

または:句がなくて、それらの行に絞り込むためにどこ完全外部へ

SELECT a.feature_id, b.feature_id, a.language, b.language 
FROM table 1 a LEFT OUTER JOIN table 2 b 
on a.feature_id || a.language <> b.feature_id || b.language 
WHERE b.feature_id is NULL 
関連する問題