Записи SQL Match в любом порядке

Учитывая таблицу, как

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 одинаковы, но в другом порядке?

какой движок sql вы используете? mysql, SQL-сервер или что-то еще?

Hieu Le 05.05.2022 04:07
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
1
27
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Это сделает это: соедините таблицу с самой собой и отфильтруйте интересующие вас строки (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

Другие вопросы по теме