быстро взять все коррелированные строки из таблицы

0

У меня есть большая таблица с несколькими столбцами, представляющими связанные события. Это включает в себя столбцы id и nextId, где id означает id какого-либо события1, а nextId указывает, в каком другом событии использовалось это событие1. Тем не менее, нет столбца " prev_id ", который бы указывал, какое событие0 внесло вклад в событие1. Можно ли построить запрос, который будет генерировать для меня такую таблицу, не занимая очень много времени?

Вот пример того, что я имею в виду:

id | nextId
10 |  34
5  | 67
22 | 23
2  | 10
16 | 22
4  | 5

Я хочу иметь следующее:

prev_id | id | next_id
2       | 10 | 34
4       | 5  | 67
16      | 22 | 23
Теги:

3 ответа

0

В дополнение к тому, что сказали другие, вы также можете выполнить это с помощью иерархических запросов.

WITH test_data AS (
    SELECT 10 AS ID,34 AS nextID FROM DUAL
    UNION SELECT 5,67 FROM DUAL
    UNION SELECT 22,23 FROM DUAL
    UNION SELECT 2,10 FROM DUAL
    UNION SELECT 16,22 FROM DUAL
    UNION SELECT 4,5 FROM DUAL
)
SELECT h.*
FROM (
    SELECT PRIOR t.ID AS prevID,
           t.ID,
           t.nextID
    FROM test_data t
    CONNECT BY t.ID = PRIOR t.nextID
) h
WHERE h.prevID IS NOT NULL
ORDER BY h.prevID
0

Вам нужно только присоединиться к себе.

Но для удобства чтения я бы порекомендовал использовать CTE:

with prevs as (
    select nextid as id, id as previd from ids
)
select previd, id, nextid
from ids
join prevs using(id)
;
 previd | id | nextid 
--------+----+--------
      4 |  5 |     67
      2 | 10 |     34
     16 | 22 |     23
(3 rows)
0

Вы можете использовать join:

select t.id as prev_id, t.nextid as id, tnext.nextid as next_id
from t join
     t tnext
     on tnext.id = t.nextid;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню