我有一个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>
我想在不预先处理数据的情况下这样做(避免循环数据等)
建议?
答案 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_1
和eventid_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
在有问题的情况下,此查询应该获得第一行和第三行。