2011-01-25 5 views
1

何らかの理由で、次のDISTINCTが機能しません。私はEmailコラムから[email protected]を1つしか期待していませんでしたが、2つの同じものを取得しました。distinctを使用しているSQL Serverで動作しません

1> SELECT DISTINCT t.Email,t.Lat_From,t.Lon_From 
     FROM tbl_Trip t,tbl_User u 
     WHERE t.Email like u.Email AND u.Member_Of like 'yahoo' 
2> go 

    Email   Lat_From   Lon_From 
    ------------- ------------------- ----------------------- 
    [email protected] 41.773289200000001 -71.378798500000002 
    [email protected] 41.908398699999999 -71.436531000000002 

(2行が影響を受ける)

+1

特定の結果については、結果として取得する行はどれですか? – zerkms

答えて

2

あなただけが特異レコードあたりの電子メール保持されることを望むかに基づいてどのような順序に変更order by t.lat_from 1無差別

SELECT Email,Lat_From,Lon_From 
FROM 
(
    SELECT t.Email,t.Lat_From,t.Lon_From, rn=row_number() over(
     partition by t.Email order by t.Lat_From) 
     FROM tbl_Trip t,tbl_User u 
     WHERE t.Email like u.Email AND u.Member_Of like 'yahoo' 
) X 
WHERE rn=1 

をしたい場合、これはあなたのために働く必要があります。

+0

なぜTOP 1だけではないのですか? –

+0

ありがとうございます – Bruce

+0

cyberkiwi、これは動作しますか? – Bruce

3

個別全体結果セット行にはなく、それが適切な前に指定されたフィールドに適用されます。

だからあなたの場合には、あなたがt.Email,t.Lat_From,t.Lon

5

これらのユニークな行を取得は正しい結果です。緯度と経度は異なるため、行はDISTINCTです。

メールを1回だけ送信したい場合は、そのメールの緯度と経度はどれくらいですか?

また、「yahoo」にワイルドカードがないので、=演算子を使用するのと同じことがわかりますか?

2

グループ句を追加する必要がある列に応じて区別したい場合は、

SELECT DISTINCT t.Email 
    , t.Lat_From 
    , t.Lon_From 
FROM tbl_Trip t,tbl_User u 
WHERE t.Email like u.Ema il 
AND u.Member_Of like 'yahoo' 
GROUP BY t.Email 

特定のエントリを取得するには、order by句を使用する必要があります。 SQL Serverの2005年以降については

+0

この**はSQL Serverでは**動作しません。 MySQLのみ、収差。 – RichardTheKiwi

+0

これはどの緯度と経度の値が返ってくると思いますか? –

+0

@cyberwiki:私はそれが収差ではないと思っています。それは慎重に考慮されているように思われます。しかし、それはMySQLに独特です。 –

関連する問題