Сложный запрос. Помогите пожалуйста.

Не могу
Дата: 31.05.2006 13:05:31
Задача первая
===============

Имеем две таблицы.

Талица 1
---------
ИД ПОЛЕ1 ПОЛЕ2 ПОЛЕ3 УНИКАЛЬНОЕ ПОЛЕ4
1 ля-ля ля-ля ля-ля УН1 ля-ля
2 ля-ля ля-ля ля-ля УН2 ля-ля
3 ля-ля ля-ля ля-ля УН3 ля-ля
4 ля-ля ля-ля ля-ля УН4 ля-ля
5 ля-ля ля-ля ля-ля УН5 ля-ля
где ИД и УНИКАЛЬНОЕ - это уникальное в системе, а не в таблице.

Таблица 2
----------
ИД ПОЛЕ1 ПОЛЕ2 ПОЛЕ3 УНИКАЛЬНОЕ ПОЛЕ4
10 ля-ля ля-ля ля-ля УН1 ля-ля
20 ля-ля ля-ля ля-ля УН20 ля-ля
30 ля-ля ля-ля ля-ля УН3 ля-ля
40 ля-ля ля-ля ля-ля УН40 ля-ля
50 ля-ля ля-ля ля-ля УН5 ля-ля
где ИД и УНИКАЛЬНОЕ - это уникальное в системе, а не в таблице.

Необходимо сделать такой запрос, чтобы получилось следующее:

ИД ПОЛЕ1 ПОЛЕ2 ПОЛЕ3 УНИКАЛЬНОЕ ПОЛЕ4
1 ля-ля ля-ля ля-ля УН1 ля-ля
2 ля-ля ля-ля ля-ля УН2 ля-ля
3 ля-ля ля-ля ля-ля УН3 ля-ля
4 ля-ля ля-ля ля-ля УН4 ля-ля
5 ля-ля ля-ля ля-ля УН5 ля-ля
20 ля-ля ля-ля ля-ля УН20 ля-ля
40 ля-ля ля-ля ля-ля УН40 ля-ля

То есть ведущая таблица 1, а таблица 2 подчиненная. То есть добавить к записям из таблицы 1 только те записи из таблицы 2, которых нет в таблице 1. Судим по УНИКАЛЬНОМУ полю.


Задача вторая
=============

Имеем четыре таблицы:

ПЕРВАЯ ПАРА ТАБЛИЦ

Талица 1
---------
ИД ПОЛЕ1 ПОЛЕ2 ПОЛЕ3 УНИКАЛЬНОЕ ПОЛЕ4
1 ля-ля ля-ля ля-ля УН1 ля-ля
2 ля-ля ля-ля ля-ля УН2 ля-ля
3 ля-ля ля-ля ля-ля УН3 ля-ля
4 ля-ля ля-ля ля-ля УН4 ля-ля
5 ля-ля ля-ля ля-ля УН5 ля-ля
где ИД и УНИКАЛЬНОЕ - это уникальное в системе, а не в таблице.

Таблица 2
----------
ИД ПОЛЕ1 ПОЛЕ2 ПОЛЕ3 ПОЛЕ4
1 ля-ля ля-ля ля-ля ля-ля
2 ля-ля ля-ля ля-ля ля-ля
3 ля-ля ля-ля ля-ля ля-ля
4 ля-ля ля-ля ля-ля ля-ля
5 ля-ля ля-ля ля-ля ля-ля
где ИД - это уникальное в системе, а не в таблице.


ВТОРАЯ ПАРА ТАБЛИЦ

Таблица 3
----------
ИД ПОЛЕ1 ПОЛЕ2 ПОЛЕ3 УНИКАЛЬНОЕ ПОЛЕ4
10 ля-ля ля-ля ля-ля УН1 ля-ля
20 ля-ля ля-ля ля-ля УН20 ля-ля
30 ля-ля ля-ля ля-ля УН3 ля-ля
40 ля-ля ля-ля ля-ля УН40 ля-ля
50 ля-ля ля-ля ля-ля УН5 ля-ля
где ИД и УНИКАЛЬНОЕ - это уникальное в системе, а не в таблице.

Таблица 4
----------
ИД ПОЛЕ1 ПОЛЕ2 ПОЛЕ3 ПОЛЕ4
10 ля-ля ля-ля ля-ля ля-ля
20 ля-ля ля-ля ля-ля ля-ля
30 ля-ля ля-ля ля-ля ля-ля
40 ля-ля ля-ля ля-ля ля-ля
50 ля-ля ля-ля ля-ля ля-ля
где ИД - это уникальное в системе, а не в таблице.


Необходимо сделать запрос результатом которого будет:

ИД ПОЛЕ1 ПОЛЕ2 ПОЛЕ3 ПОЛЕ4
1 ля-ля ля-ля ля-ля ля-ля
2 ля-ля ля-ля ля-ля ля-ля
3 ля-ля ля-ля ля-ля ля-ля
4 ля-ля ля-ля ля-ля ля-ля
5 ля-ля ля-ля ля-ля ля-ля
1 ля-ля ля-ля ля-ля ля-ля
20 ля-ля ля-ля ля-ля ля-ля
3 ля-ля ля-ля ля-ля ля-ля
40 ля-ля ля-ля ля-ля ля-ля
5 ля-ля ля-ля ля-ля ля-ля

То есть ведущая таблица 1, а таблица 3 подчиненная таблице 1. И есть
ведущая таблица 2, а таблица 4 подчиненная таблице 2.
То есть добавить к записям из таблицы 2 записи из таблицы 4, следующим образом:
- если УНИКАЛЬНЫЕ ПОЛЯ в Т1 и Т3 равны, то добавляя запись из Т4 в Т2 делаем это таким образом, что у добавляемой записи из Т4 ИД меняется на ИД из Т2. Ведь ведущая Т2. Поэтому ее ИД подставляем.

Вот как бы такое замутить?
dmidek
Дата: 31.05.2006 13:11:05
Не могу
Дата: 31.05.2006 13:12:20
ДЛЯ ПЕРВОЙ ЗАДАЧИ
Таблица 1
ИДПОЛЕ1ПОЛЕ2ПОЛЕ3УНИКАЛЬНОЕПОЛЕ4
1ля-ляля-ляля-ляУН1ля-ля
2ля-ляля-ляля-ляУН2ля-ля
3ля-ляля-ляля-ляУН3ля-ля
4ля-ляля-ляля-ляУН4ля-ля
5ля-ляля-ляля-ляУН5ля-ля


Таблица 2
ИДПОЛЕ1ПОЛЕ2ПОЛЕ3УНИКАЛЬНОЕПОЛЕ4
10ля-ляля-ляля-ляУН1ля-ля
20ля-ляля-ляля-ляУН20ля-ля
30ля-ляля-ляля-ляУН3ля-ля
40ля-ляля-ляля-ляУН40ля-ля
50ля-ляля-ляля-ляУН5ля-ля


Результат
ИДПОЛЕ1ПОЛЕ2ПОЛЕ3УНИКАЛЬНОЕПОЛЕ4
1ля-ляля-ляля-ляУН1ля-ля
2ля-ляля-ляля-ляУН2ля-ля
3ля-ляля-ляля-ляУН3ля-ля
4ля-ляля-ляля-ляУН4ля-ля
5ля-ляля-ляля-ляУН5ля-ля
20ля-ляля-ляля-ляУН20ля-ля
40ля-ляля-ляля-ляУН40ля-ля
Не могу
Дата: 31.05.2006 13:16:28
ДЛЯ ВТОРОЙ ЗАДАЧИ

Таблица 1
ИДПОЛЕ1ПОЛЕ2ПОЛЕ3УНИКАЛЬНОЕПОЛЕ4
1ля-ляля-ляля-ляУН1ля-ля
2ля-ляля-ляля-ляУН2ля-ля
3ля-ляля-ляля-ляУН3ля-ля
4ля-ляля-ляля-ляУН4ля-ля
5ля-ляля-ляля-ляУН5ля-ля


Таблица 2
ИДПОЛЕ1ПОЛЕ2ПОЛЕ3ПОЛЕ4
1ля-ляля-ляля-ляля-ля
2ля-ляля-ляля-ляля-ля
3ля-ляля-ляля-ляля-ля
4ля-ляля-ляля-ляля-ля
5ля-ляля-ляля-ляля-ля



Таблица 3
ИДПОЛЕ1ПОЛЕ2ПОЛЕ3УНИКАЛЬНОЕПОЛЕ4
10ля-ляля-ляля-ляУН1ля-ля
20ля-ляля-ляля-ляУН20ля-ля
30ля-ляля-ляля-ляУН3ля-ля
40ля-ляля-ляля-ляУН40ля-ля
50ля-ляля-ляля-ляУН5ля-ля



Таблица 4
ИДПОЛЕ1ПОЛЕ2ПОЛЕ3ПОЛЕ4
10ля-ляля-ляля-ляля-ля
20ля-ляля-ляля-ляля-ля
30ля-ляля-ляля-ляля-ля
40ля-ляля-ляля-ляля-ля
50ля-ляля-ляля-ляля-ля



Результат
ИДПОЛЕ1ПОЛЕ2ПОЛЕ3ПОЛЕ4
1ля-ляля-ляля-ляля-ля
2ля-ляля-ляля-ляля-ля
3ля-ляля-ляля-ляля-ля
4ля-ляля-ляля-ляля-ля
5ля-ляля-ляля-ляля-ля
1ля-ляля-ляля-ляля-ля
20ля-ляля-ляля-ляля-ля
3ля-ляля-ляля-ляля-ля
40ля-ляля-ляля-ляля-ля
5ля-ляля-ляля-ляля-ля
Не могу
Дата: 31.05.2006 13:17:09
ПЕРВАЯ ЗАДАЧА - это очевидно. ВТОРАЯ НЕ ПОЛУЧАЕТСЯ.
Stax.
Дата: 31.05.2006 21:00:34
Не могу
ПЕРВАЯ ЗАДАЧА - это очевидно. ВТОРАЯ НЕ ПОЛУЧАЕТСЯ.

приведите данные (ля-ля)
через create table и insert
зы
лень создавать таблицы
......
stax
Не могу
Дата: 01.06.2006 11:44:53
CREATE TABLE Table_1
    ( 
       ID VARCHAR2(20),
       F1 VARCHAR2(20),
       F2 VARCHAR2(20),
       F3 VARCHAR2(20),
       UN VARCHAR2(20),
       F4 VARCHAR2(20)
    );

CREATE TABLE Table_2
    ( 
       ID VARCHAR2(20),
       F1 VARCHAR2(20),
       F2 VARCHAR2(20),
       F3 VARCHAR2(20),
       F4 VARCHAR2(20),
       F5 VARCHAR2(20)
    );

CREATE TABLE Table_3
    ( 
       ID VARCHAR2(20),
       F1 VARCHAR2(20),
       F2 VARCHAR2(20),
       F3 VARCHAR2(20),
       UN VARCHAR2(20),
       F4 VARCHAR2(20)
    );

CREATE TABLE Table_4
    ( 
       ID VARCHAR2(20),
       F1 VARCHAR2(20),
       F2 VARCHAR2(20),
       F3 VARCHAR2(20),
       F4 VARCHAR2(20),
       F5 VARCHAR2(20)
    );


INSERT INTO table_1 VALUES ('1', 'ля-ля', 'ля-ля', 'ля-ля', 'УН1', 'ля-ля');
INSERT INTO table_1 VALUES ('2', 'ля-ля', 'ля-ля', 'ля-ля', 'УН2', 'ля-ля');
INSERT INTO table_1 VALUES ('3', 'ля-ля', 'ля-ля', 'ля-ля', 'УН3', 'ля-ля');
INSERT INTO table_1 VALUES ('4', 'ля-ля', 'ля-ля', 'ля-ля', 'УН4', 'ля-ля');
INSERT INTO table_1 VALUES ('5', 'ля-ля', 'ля-ля', 'ля-ля', 'УН5', 'ля-ля');


INSERT INTO table_2 VALUES ('1', 'ля-ля', 'ля-ля', 'ля-ля', 'ля-ля', 'ля-ля');
INSERT INTO table_2 VALUES ('2', 'ля-ля', 'ля-ля', 'ля-ля', 'ля-ля', 'ля-ля');
INSERT INTO table_2 VALUES ('3', 'ля-ля', 'ля-ля', 'ля-ля', 'ля-ля', 'ля-ля');
INSERT INTO table_2 VALUES ('4', 'ля-ля', 'ля-ля', 'ля-ля', 'ля-ля', 'ля-ля');
INSERT INTO table_2 VALUES ('5', 'ля-ля', 'ля-ля', 'ля-ля', 'ля-ля', 'ля-ля');


INSERT INTO table_3 VALUES ('10', 'ля-ля', 'ля-ля', 'ля-ля', 'УН1', 'ля-ля');
INSERT INTO table_3 VALUES ('20', 'ля-ля', 'ля-ля', 'ля-ля', 'УН20', 'ля-ля');
INSERT INTO table_3 VALUES ('30', 'ля-ля', 'ля-ля', 'ля-ля', 'УН3', 'ля-ля');
INSERT INTO table_3 VALUES ('40', 'ля-ля', 'ля-ля', 'ля-ля', 'УН40', 'ля-ля');
INSERT INTO table_3 VALUES ('50', 'ля-ля', 'ля-ля', 'ля-ля', 'УН5', 'ля-ля');


INSERT INTO table_4 VALUES ('10', 'ля-ля', 'ля-ля', 'ля-ля', 'ля-ля', 'ля-ля');
INSERT INTO table_4 VALUES ('20', 'ля-ля', 'ля-ля', 'ля-ля', 'ля-ля', 'ля-ля');
INSERT INTO table_4 VALUES ('30', 'ля-ля', 'ля-ля', 'ля-ля', 'ля-ля', 'ля-ля');
INSERT INTO table_4 VALUES ('40', 'ля-ля', 'ля-ля', 'ля-ля', 'ля-ля', 'ля-ля');
INSERT INTO table_4 VALUES ('50', 'ля-ля', 'ля-ля', 'ля-ля', 'ля-ля', 'ля-ля');

Vadim_Maximov
Дата: 01.06.2006 12:48:02
Вот такой бред у меня получился

select decode(un, qqq, qid, id), un from (
select t2.id, 
       t1.un,
       to_char(null) qqq,
       to_char(null) qid
from   table_2 t2,
       table_1 t1
where  t1.id = t2.id
union all
select t4.id,
       t3.un,
       q.un qqq,
       q.qqq qid
from   table_4 t4,
       table_3 t3,
       (select * 
        from   (select id,
                       un,
                       row_number() over (partition by un order by to_number(id)) qq,
                       first_value(id) over(partition by un order by to_number(id)) qqq
                from   (select t2.id, 
                               t1.un
                        
                        from   table_2 t2,
                               table_1 t1
                        where  t1.id = t2.id
                        union all
                        select t4.id,
                               t3.un
                        
                        from   table_4 t4,
                               table_3 t3
                        where  t3.id = t4.id
                        )
                order by to_number(id))
        where  qq = 2) q
where  
       t3.id = t4.id and
       q.id (+) = t3.id
)
order by to_number(id)

Результат:
1	1	УН1
2 2 УН2
3 3 УН3
4 4 УН4
5 5 УН5
6 1 УН1
7 20 УН20
8 3 УН3
9 40 УН40
10 5 УН5
Stax.
Дата: 01.06.2006 13:32:09
Не могу

То есть ведущая таблица 1, а таблица 3 подчиненная таблице 1. И есть
ведущая таблица 2, а таблица 4 подчиненная таблице 2.
То есть добавить к записям из таблицы 2 записи из таблицы 4, следующим образом:
- если УНИКАЛЬНЫЕ ПОЛЯ в Т1 и Т3 равны, то добавляя запись из Т4 в Т2 делаем это таким образом, что у добавляемой записи из Т4 ИД меняется на ИД из Т2. Ведь ведущая Т2. Поэтому ее ИД подставляем.
Вот как бы такое замутить?

какое ид брать из т2?
как связать т4 и т2, по т1?
.....
stax
Не могу
Дата: 01.06.2006 13:33:30
У T1 и Т2 ИД равны.
и у Т3 и Т4 тоже ИД равны. Исходить надо из этого.