如何避免在 MySQL 中导致对称结果的自连接?

How to avoid self-joins that result in symmetric results in MySQL?

我正在寻找在同一 table 中彼此相隔 2 周以内的记录,例如:

    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     |

要么我以错误的方式进行了连接,导致了这种重复的结构,要么连接没问题,但我需要一些方法来删除手性记录。谁能告诉我如何进行?

添加:

a.Value < b.Value

WHERE 子句。

或者,更好的是,如果您有一个主键(并且 所有 表都应该有一个主键):

a.pk < b.pk