使用SQL删除具有匹配的不同字段的记录

时间:2014-07-11 12:28:13

标签: mysql sql algorithm duplicates

我有一个MySQL表,其数据如下所示:

EventID_1   Event_ID2   SomeInfo    MoreInfo    YetMoreInfo
1              5           blah        blah        blah
5              1           Boo         boo         Boo
4              9           foo         bar         bar

就我的目的而言,第一和第二条记录是相同的,因为它们仅以不同的顺序引用相同的两个事件。 (活动1和活动5)。我想查询这个表并获取所有数据但只有一个记录用于事件1和事件5的组合(我希望,在这种情况下,结果集包含第1和第3个记录或第2和第3个记录)。 / p>

我想在不预先处理数据的情况下这样做(避免循环数据等)

建议?

2 个答案:

答案 0 :(得分:1)

SELECT *
FROM table_name o,
WHERE o.eventid_1 <= o.eventid_2 OR NOT EXISTS (
    SELECT 1
    FROM table_name i
    WHERE i.eventid_1 = o.eventid_2
    AND i.eventid_2 = o.eventid_1
);

但是,如果eventid_1eventid_2的顺序对于任何并不重要,那么您应该确保它们始终存储在表格中某种方式(例如,您应该使用CHECK约束强制eventid_1 <= eventid_2(PostgreSQL有这些,所以我希望MySQL也这样做)。)

[编辑:修复表别名。]

答案 1 :(得分:-1)

我认为您可以使用以下查询 -

SELECT t1.*
FROM   table_name t1,
       table_name t2
WHERE  t1.eventid_1 <> t2.eventid_2
AND    t1.eventid_2 <> t2.eventid_1

UNION

SELECT t1.*
FROM   table_name t1,
       table_name t2
WHERE  t1.eventid_1 = t2.eventid_2
AND    t1.eventid_2 = t2.eventid_1
AND    t1.eventid_1 < t1.eventid_2

在有问题的情况下,此查询应该获得第一行和第三行。