2011-10-28 11 views
2

私は3つのテーブルを結合するこのクエリを持っています。それは働いているように見えますが、重複しています。重複を削除するにはどうすればよいですか?SQLのユニークな値

SELECT FIRST 100 e.email_id, e.location_id, e.email, l.location_type, p.salutation, 
     p.fname, p.lname 
FROM email e, location l, person p 
WHERE e.location_id = l.location_id 
AND l.per_id = p.per_id 
+0

使用しているInformixのバージョンはどれですか?実際に古いバージョンのInformix(OnLine 5.20、SE 7.2x)を使用していない限り、使用している暗黙的な結合の代わりにSQL-92の明示的な結合表記を使用できるはずです。また、Informix形式のOUTER結合よりも明示的な結合を使用する必要があります。あなたが今削除したあなたの質問を見ました。 –

答えて

4

単純な答えは、クエリにDISTINCTを追加することです。

SELECT FIRST 100 DISTINCT e.email_id, e.location_id, e.email, l.location_type, p.salutation, p.fname, p.lname 
FROM email e, location l, person p 
WHERE e.location_id = l.location_id 
AND l.per_id = p.per_id 
+0

DISTINCTを追加するだけで、私がSELECT FIRST 2 –

+2

を実行しても永久に実行されます。エンジンがすべての行をスキャンしてクライアントに返す前に重複排除を実行する必要があるからです。この例では、FIRST N句はあまり達成されません。 – RET

2

あなたがまっすぐにインナーを行っているので、個別

SELECT FIRST 100 Distinct e.email_id, e.location_id, 
     e.email, l.location_type, p.salutation, 
     p.fname, p.lname 
    FROM email e, location l, person p 
    WHERE e.location_id = l.location_id AND l.per_id = p.per_id 
2

を使うだけ入力テーブルに重複したエントリが存在する場合、結果セットの重複したエントリを取得し、参加します。

SELECT FIRST 100 e.email_id, e.location_id, e.email, l.location_type, p.salutation, 
     p.fname, p.lname 
    FROM email AS e 
    JOIN location AS l ON e.location_id = l.location_id 
    JOIN person AS p ON l.per_id = p.per_id 

問題が発生する可能性が最も高いのは、「場所」表です。これは、任意のデータを返す場合、あなたはトラブルがある場所へのポインタを持って

SELECT location_id, per_id, COUNT(*) 
    FROM location 
GROUP BY location_id, per_id 
HAVING COUNT(*) > 1; 

:あなたは、次のようなクエリでそれを確立することができます。 location_id、per_idの組み合わせに固有の制約がない理由を調べる必要があります。

関連する問題