2016-07-12 4 views
0

私のような、同じテーブルで、お互いの2週間以内のレコードを探していました:MySQLで対称的な結果になる自己結合を避けるには?

SELECT stuff 
    FROM mytable AS a 
    JOIN mytable AS b 
    ON a.ID = b.ID 
    WHERE  
(
    a.Date = b.Date 
    OR 
    a.Date BETWEEN DATE_SUB(b.Date, INTERVAL 14 DAY) AND DATE_ADD(b.Date, INTERVAL 14 DAY) 
    OR 
    b.Date BETWEEN DATE_SUB(a.Date, INTERVAL 14 DAY) AND DATE_ADD(a.Date, INTERVAL 14 DAY) 
) 
    ; 

それがうまく働いたが、今、私はこのタイプの構造を持つ結果があります。

| ID | a.Date  | b.Date  | a.Value | b.Value | 
|----|------------|------------|---------|---------| 
| 1 | 2016-01-01 | 2016-01-02 | foo  | bar  | 
| 1 | 2016-01-02 | 2016-01-01 | bar  | foo  | 

私はこの重複した構造につながっている悪い方法で私の結合を行った、または結合は大丈夫ですが、キラルなレコードを削除するには何らかの方法が必要です。誰でも進める方法について私にアドバイスできますか?

答えて

1

追加:WHERE句に

a.Value < b.Value 

それとも、あなたは主キーを持っている場合は、より良いまだ、(およびすべてのテーブルが持つべき主キー):

a.pk < b.pk 
関連する問題