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

У меня есть две таблицы следующим образом

Таблица 1

column1|column2
----------------
a1     | c1
----------------
a2     | c2

Таблица 2

column1|column2|column3
----------------------
1      | a1    | x
-----------------------
2      | a1    | y
-----------------------
3      | a1    | z
-----------------------
4      | a2    | ab
-----------------------
5      | a2    | cd
-----------------------
6      | a2    | ef

Table1 — это родительская таблица, а table2 — это дочерняя таблица.

Столбец1 таблицы1 сопоставляется со столбцом2 таблицы2.

Таблица2 может содержать несколько записей для каждой записи столбца1 в таблице1 примерно так.

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

Итак, мой набор результатов будет

column1|column2|column3
----------------------
1      | a1    | x
-----------------------
2      | a2    | ab

Как сделать соединение для достижения этого в Oracle 11 g. Я использую sql-навигатор +


person Yagnesh.Dixit    schedule 03.11.2012    source источник
comment
Нет смысла говорить о первой записи, поскольку кортежи в отношении не упорядочены, если только они не упорядочены явно, я думаю, вы имеете в виду одну запись.   -  person jsj    schedule 03.11.2012


Ответы (1)


select
  x.column1,
  x.column2,
  x.column3
from
    (select
      t2.column1,
      t2.column2,
      t2.column3,
      dense_rank() over (partition by t2.column1, t2.column2 order by t2.column3) as rank
    from
      table1 t1
      inner join table2 t2 on t2.column2 = t1.column1) x
where
  x.rank = 1

Но поскольку вы не используете никаких полей из t1, вы можете пропустить соединение. Его можно использовать для фильтрации (что с тем же успехом можно было бы сделать с помощью exists, но, поскольку t1 является родительской таблицей, все записи в t2 в любом случае должны иметь совпадающую запись t1.

person GolezTrol    schedule 03.11.2012