Есть два способа сделать это,
ROWID: ROWID - это псевдостолбец в таблице, который хранит и возвращает адрес строки в формате HEXADECIMAL с таблицами базы данных. ROWID - это постоянные уникальные идентификаторы для каждой строки в таблице. база данных. ROWID состоит из 18-символьной строки с форматом. BBBBBBBBB.RRRR.FFFF Где B - блок, R - строка, F - файл.
Запрос ниже будет работать, если вы не выполняете никакого удаления, поскольку oracle повторно использует адрес в случае удаления.
select orderedtable1.columnA,orderedtable1.rn
from
(select columnA, row_number() over(order by rowid) rn
from table2) orderedtable2,
(select columnA, row_number() over(order by rowid) rn
from table1) orderedtable1
where orderedtable1.columnA=orderedtable2.columnA
and orderedtable1.rn = orderedtable2.rn
Вывод:
COLUMNA RN
1 1
3 3
ROWNUM: для каждой строки, возвращаемой запросом, псевдостолбец ROWNUM возвращает число, которое указывает порядок, в котором строка была выбрана из таблицы. ROWNUM действителен только для этого сеанса этого запроса, поскольку он изменяется по мере того, как записи вставляются / изменяются в таблице.
Запрос ниже будет работать при условии, что у вас нет индекса, так как по умолчанию выбор выбирается способ вставки записей, поскольку у вас нет индекса / ограничений для таблицы, и в этом случае вывод будет отличаться.
select orderedtable1.columnA,orderedtable1.rn
from
(select columnA, rownum rn
from table2) orderedtable2,
(select columnA, rownum rn
from table1) orderedtable1
where orderedtable1.columnA=orderedtable2.columnA
and orderedtable1.rn = orderedtable2.rn
Вывод:
COLUMNA RN
1 1
3 3
Подробнее по решению см. ссылку dbfiddle https://dbfiddle.uk/?rdbms=oracle_18&fiddle=b76134a6d6c204faa994f534ac89d1b0