Одним из вариантов будет использование триггера перед вставкой, чтобы предотвратить это в первую очередь. Другой вариант - ничего не делать, а просто обрабатывать это в своих отчетах. Например, если вы хотите найти все разные пары отправителей и получателей, вы можете использовать LEAST
и GREATEST
:
SELECT DISTINCT
LEAST(sender, receiver) AS sender,
GREATEST(sender, receiver) AS receiver
FROM yourTable;
Если вы намереваетесь сохранить только первую пару, приходящую в определенном порядке, вы можете добавить в таблицу столбец отметки времени и затем агрегировать:
SELECT
LEAST(t1.sender, t1.receiver) AS sender,
GREATEST(t1.sender, t1.receiver) AS receiver
FROM yourTable t1
INNER JOIN
(
SELECT
LEAST(sender, receiver) AS sender,
GREATEST(sender, receiver) AS receiver,
MIN(ts) AS min_ts
FROM yourTable
GROUP BY
LEAST(sender, receiver),
GREATEST(sender, receiver)
) t2
ON LEAST(t1.sender, t1.receiver) = t2.sender AND
GREATEST(t1.sender, t1.receiver) = t2.receiver AND
t1.ts = t2.min_ts;