2012-04-03 8 views
3

を削除:複数のテーブルからの選択に、私はSQLiteのDBで2つのテーブルを持っている、との両方が、次のフィールドを持つ重複

idnumber、ファーストネーム、middlename、姓、電子メール、ログイン

一つのテーブルには、すべてを持っていますこれらのデータが入力され、もう一方にはidnumberまたは中間名が設定されていません。

私のような何かをできるようにしたいと思います:

select idnumber, firstname, middlename, lastname, email, login 
from users1,users2 group by login; 

しかし、私は「あいまいな」エラーが発生します。

select idnumber, firstname, middlename, lastname, email, login from users1 
union 
select idnumber, firstname, middlename, lastname, email, login from users2; 

LOOKSはうまくいきますが、重複があります。私の理解では、ユニオンは重複を許可すべきではないが、2番目のユーザーテーブルにはすべてのフィールドが設定されていないので、実際の重複ではない可能性があります(たとえば、 "20、bob、alan、smith、[email protected]、bob "は" NULL、bob、NULL、smith、[email protected]、bob "と同じではありません)。

アイデア?私は何が欠けていますか?私がしたいのは、 "ログイン"に基づく重複除外だけです。

ありがとうございます!

答えて

2

unionと言っているので、重複するレコードは削除されます(union allはありません)。 2つのレコードは、その列の値がすべて一致したときに重複と見なされます。この例では、NULL20または'alan'と等しくないので、これらのレコードは重複しているとはみなされません。

編集:

[...]私は考えることができる唯一の方法は、新しいテーブルを作成することになる[...]

必要はありません。あなたが唯一のmiddlenameidnumberに異なる値を持っているとことを確信している場合、しかし、

select login, max(idnumber), max(firstname), max(middlename), max(lastname), 
    max(email) from (
    select idnumber, firstname, middlename, lastname, email, login from users1 
    union 
    select idnumber, firstname, middlename, lastname, email, login from users2 
) final 
group by login 

をすることができますすべての残りの部分によって、最大フィールドのみとグループ:私はあなたが次の操作を行うことができると思います。

+0

申し訳ありませんが、重複しているかどうかを判断するには、「ログイン」がキーである必要があります。したがって、両方とも "ログイン"が設定されているので、 "20、bob、alan、smith、[email protected]、bob"は "NULL、bob、NULL、smith、[email protected]、bob" "ボブ"に。 これは実行可能ですか?つまり、新しいテーブルを作成し、すべての情報をコピーしてから、「ログインしてグループ化する」と思う唯一の方法です。 これを行うにはもっと良い方法がありますか? – staze

+1

完璧!完璧に動作します!ありがとう! – staze

0

不完全なテーブルをログインして完全なテーブルに残すことができます。その後、結果セットをプログラムで操作します。

関連する問題