PL sql код для проверки, существует ли запись в одном столбце в том же порядке, что и запись в другом столбце разных таблиц - PullRequest
0 голосов
/ 08 мая 2020

Предположим, у меня есть данные из двух таблиц ниже, и я хочу проверить, существует ли запись в одном столбце в том же порядке, что и запись в другом столбце разных таблиц

table 1
column A
1
2
3

table2
column A
1
1
3
3
3
2
2

Ответы [ 2 ]

0 голосов
/ 08 мая 2020

Есть два способа сделать это,

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

0 голосов
/ 08 мая 2020

Я хочу проверить, существует ли запись в одном столбце в том же порядке, что и запись в другом столбце разных таблиц

Стандартная Oracle таблица - это heap-organized таблица. Это таблица со строками, хранящимися в без определенного порядка , строки вставляются там, где они подходят.

...