同样的事情也将有助于使用ROWNUM和CTE
with test_Data as
(
SELECT COL1, COL2, COL3, ROWNUM ROWCOUNT FROM
(
SELECT 'A' COL1, 'B' COL2, 'W' COL3 FROM DUAL UNION
SELECT 'B' COL1, 'A' COL2, 'W' COL3 FROM DUAL UNION
SELECT 'C' COL1, 'D' COL2, 'X' COL3 FROM DUAL UNION
SELECT 'D' COL1, 'C' COL2, 'X' COL3 FROM DUAL
) ORDER BY COL3, COL1
)
SELECT TAB1.COL1, TAB1.COL2, TAB1.COL3 FROM TEST_DATA TAB1, TEST_DATA TAB2
WHERE
TAB1.COL1 = TAB2.COL2
AND TAB1.COL2 = TAB2.COL1
AND TAB1.COL3 = TAB2.COL3
AND TAB1.ROWCOUNT = TAB2.ROWCOUNT+1;
你的查询,而无需TESTDATA会,
with CTE as
(SELECT COL1, COL2, COL3, ROWNUM ROWCOUNT FROM MY_TABLE ORDER BY COL3,COL1)
SELECT TAB1.COL1, TAB1.COL2, TAB1.COL3 FROM CTE TAB1, CTE TAB2
WHERE
TAB1.COL1 = TAB2.COL2
AND TAB1.COL2 = TAB2.COL1
AND TAB1.COL3 = TAB2.COL3
AND TAB1.ROWCOUNT = TAB2.ROWCOUNT+1;
哪些DBMS您使用的? Postgres的?甲骨文? –
@a_horse_with_no_name Oracle 11g – bbuser