我有一個複雜的查詢在大型PostgreSQL表上執行。下面是數據的一個樣本:在PostgreSQL中查找對稱對
我的目標是與人物y
或n
填充柱to_from
。
讓我們的第一行作爲一個例子 - 在start
= 48749的值,並在end
= 50699.值如果另一其他行中,其中的值是逆表中存在任何地方,即,其中end
= 48749和值start
= 50699,我想填寫列to_from
行與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'。我想這三個人中的第一個會找到。那有意義嗎? –