Учитывая таблицу, как
OBJECTID,UID,FID1,FID2
1,Record1,00000494e1f3,00000494e1f3
2,Record2,00000494e1ed,00000494e1ed
3,Record3,eff9df49d9ec,6d1f58545043
4,Record4,6d1f58545043,eff9df49d9ec
5,Record5,37fce22b2bb5,7fce22b2bb5
6,Record6,00000494e1ef,00000494e1ef
Мы видим, что в записях 3 и 4 значения FID1 и FID2 одинаковы, но в другом порядке.
Я могу просто объединить значения FID1 и FID2, а затем выполнить уникальность в этом столбце, но это не даст нам случая, когда FID1/2 одинаковы, но в другом порядке.
См. https://www.db-fiddle.com/f/gp3vYGhB9cgYUukcEwM3K3/1
Как найти все записи, в которых значения FID1 и FID2 одинаковы, но в другом порядке?
Это сделает это: соедините таблицу с самой собой и отфильтруйте интересующие вас строки (FID одинаковые, но в другом порядке, и строки не являются одной и той же строкой):
SELECT t1.*
FROM Test t1
JOIN Test t2
ON t1.OBJECTID != t2.OBJECTID
AND t1.r_FID1 = t2.r_FID2
AND t2.r_FID1 = t1.r_FID2;
Если вам нужна только одна из повторяющихся строк, вы можете, например. выберите тот, где FID1 больше, чем FID2 (в другой строке, очевидно, это будет наоборот):
SELECT t1.*
FROM Test t1
JOIN Test t2
ON t1.OBJECTID != t2.OBJECTID
AND t1.r_FID1 = t2.r_FID2
AND t2.r_FID1 = t1.r_FID2
AND t1.r_FID1 > t1.r_FID2;
PS: Спасибо за скрипку!
Использование IF и CONCAT в выборе также может помочь вам
SELECT hash
FROM(
select
*, IF(r_FID1 > r_FID2, CONCAT(r_FID1,'_', r_FID2), CONCAT(r_FID2,'_', r_FID1)) `hash`
from Test
) t
GROUP BY hash
какой движок sql вы используете? mysql, SQL-сервер или что-то еще?