У меня есть сложный запрос для выполнения в большой таблице PostgreSQL. Вот пример данных:Поиск симметричных пар в PostgreSQL
Моя цель состоит в том, чтобы заполнить столбец to_from
с характером y
или n
.
Давайте возьмем первую строку в качестве примера - значение в start
= 48749 и значение в end
= 50699. Если другая другая строка существует везде в таблице, где значения являются обратным, то есть, где end
= 48749 и значение в start
= 50699, я хотел бы заполнить столбециз обе строки с y
. Если инверсия не существует, первая строка должна быть заполнена n
. Ключ здесь состоит в том, чтобы перебирать каждую строку и искать ее обратную в таблице. Если найден обратный, необходимо ввести y
. Однако, если имеется более одной строки, содержащей инверсию, только первая обратная строка должна получить y
.
Я знаю, что я должен структурировать мой запрос по линии
SELECT *
FROM mytable
WHERE NOT EXISTS
AND
WHERE EXISTS
Но я не уверен, как производить вывод я ищу. Должен ли я создать дубликатную таблицу и начать с нее? Любые указания о том, с чего начать или какие шаги предпринять?
Вот пример того, как должен выглядеть результат (если это было 10 строк). Как только запись используется для пары, ее нельзя использовать для другой.
Итак:
> my_table
ogc_fid track_fid start_gid end_gid to_from
1 1 1 100 82 y
2 2 2 82 100 y
3 3 3 100 82 y
4 4 4 100 32 n
5 5 5 82 100 y
6 6 6 82 100 y
7 7 7 82 100 n
8 8 8 100 82 y
9 9 9 34 100 n
10 10 10 31 100 n
'track_fid' является первичным ключом –
вы можете вставить ваш стол в виде текста и показать, как результат должен выглядеть? также неясно, что вы подразумеваете под *, если есть несколько строк, содержащих инверсию, только первая обратная строка должна получить y *, где, как и в начале, вы говорите, что строки должны получить 'y'. –
То, что я имею в виду, 'y' должно быть ограничено парой инверсий. Скажем (опять же используя первую строку в качестве примера), что есть три строки, где 'end' = 48749 и' start' = 50699. Только одна из этих строк должна получить 'y'. Наверное, это будет первый из этих трех. Имеет ли это смысл? –