Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 INSERT с подстановкой данных  [new]
Sunbelt
Member

Откуда:
Сообщений: 55
привет)

Имеется таблица
CREATE TABLE PASSENGER (
FLIGHT int,
PASSENGER_ID int,
PASSENGER_FIRST_NAME VARCHAR2(15),
PASSENGER_LAST_NAME VARCHAR2(15),
PASSENGER_COUNTRY VARCHAR2(30)

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

Я пытаюсь вставить PASSENGER_ID для каждого уникального пассажира, но не могу разобраться, как сделать это.
14 янв 15, 18:46    [17118837]     Ответить | Цитировать Сообщить модератору
 Re: INSERT с подстановкой данных  [new]
Sunbelt
Member

Откуда:
Сообщений: 55
Думаю, может нужно создать последовательность

CREATE SEQUENCE PASS_ID
START WITH 1
INCREMENT BY 1
CACHE 100

И потом вставлять значения последовательности с условием
SELECT UNIQUE PASSENGER_FIRST_NAME, PASSENGER_LAST_NAME, PASSENGER_COUNTRY
FROM PASSENGER
14 янв 15, 18:48    [17118849]     Ответить | Цитировать Сообщить модератору
 Re: INSERT с подстановкой данных  [new]
stax..
Guest
Sunbelt
Думаю, может нужно создать последовательность

CREATE SEQUENCE PASS_ID
START WITH 1
INCREMENT BY 1
CACHE 100

И потом вставлять значения последовательности с условием
SELECT UNIQUE PASSENGER_FIRST_NAME, PASSENGER_LAST_NAME, PASSENGER_COUNTRY
FROM PASSENGER

данные в табличке уже есть и надо присвоить id?

......
stax
14 янв 15, 19:19    [17118954]     Ответить | Цитировать Сообщить модератору
 Re: INSERT с подстановкой данных  [new]
Sunbelt
Member

Откуда:
Сообщений: 55
stax..,

Все верно
PASSENGER_FIRST_NAME VARCHAR2(15),
PASSENGER_LAST_NAME VARCHAR2(15),
PASSENGER_COUNTRY VARCHAR2(30)

есть, id нужно присвоить
14 янв 15, 19:30    [17118987]     Ответить | Цитировать Сообщить модератору
 Re: INSERT с подстановкой данных  [new]
Shtock
Member

Откуда: СПб
Сообщений: 3049
вычислить rowid дубликатов как в faq по удалению дубликатов где нет перв числа и для них присвоить nextval типа
update table
set id = seq.nexval
where rowid in (select rowid from notdupelist)
14 янв 15, 19:49    [17119045]     Ответить | Цитировать Сообщить модератору
 Re: INSERT с подстановкой данных  [new]
Shtock
Member

Откуда: СПб
Сообщений: 3049
ссылку на фак, думаю найдёшь сам
14 янв 15, 19:49    [17119048]     Ответить | Цитировать Сообщить модератору
 Re: INSERT с подстановкой данных  [new]
Shtock
Member

Откуда: СПб
Сообщений: 3049
не числа а Ключа в первом моём сообщение
14 янв 15, 19:50    [17119052]     Ответить | Цитировать Сообщить модератору
 Re: INSERT с подстановкой данных  [new]
stax..
Guest
Sunbelt
stax..,

Все верно
PASSENGER_FIRST_NAME VARCHAR2(15),
PASSENGER_LAST_NAME VARCHAR2(15),
PASSENGER_COUNTRY VARCHAR2(30)

есть, id нужно присвоить

SQL> select * from t1;

        ID NAME
---------- ----------
           Stax
           Stax
           Станіслав
           Sunbelt
           Sunbelt
           Sunbelt

6 rows selected.

SQL> merge
  2    into t1 t
  3    using(
  4        select name,rownum rn from (select distinct name from t1)) d
  5    on (
  6         t.name=d.name
  7       )
  8    when matched
  9      then update set id = d.rn
 10  /

6 rows merged.

SQL> select * from t1;

        ID NAME
---------- ----------
         1 Stax
         1 Stax
         3 Станіслав
         2 Sunbelt
         2 Sunbelt
         2 Sunbelt

6 rows selected.

SQL> rollback;

Rollback complete.

SQL>


......
stax
14 янв 15, 19:52    [17119058]     Ответить | Цитировать Сообщить модератору
 Re: INSERT с подстановкой данных  [new]
Добрый Э - Эх
Guest
Sunbelt,

MERGE. В качестве значения для заполнения поля ID - [rank | dense_rank] over(order by first_name, last_name)
14 янв 15, 19:54    [17119069]     Ответить | Цитировать Сообщить модератору
 Re: INSERT с подстановкой данных  [new]
Sunbelt
Member

Откуда:
Сообщений: 55
stax..,

спасибо,

а если у меня не только имя уникальное, а все три столбца

PASSENGER_FIRST_NAME VARCHAR2(15),
PASSENGER_LAST_NAME VARCHAR2(15),
PASSENGER_COUNTRY VARCHAR2(30)
?
14 янв 15, 20:04    [17119132]     Ответить | Цитировать Сообщить модератору
 Re: INSERT с подстановкой данных  [new]
MonteCarlos
Member

Откуда:
Сообщений: 547
можно и через апдєйт в принципе
UPDATE PASSENGER P
   SET PASSENGER_ID = (SELECT NEW_ID
                       FROM (SELECT ROWID,
                                    DENSE_RANK() OVER (ORDER BY PASSENGER_FIRST_NAME, PASSENGER_LAST_NAME, PASSENGER_COUNTRY) AS NEW_ID
                             FROM PASSENGER) S
                       WHERE S.ROWID = P.ROWID)
14 янв 15, 20:12    [17119176]     Ответить | Цитировать Сообщить модератору
 Re: INSERT с подстановкой данных  [new]
Добрый Э - Эх
Guest
Sunbelt
stax..,

спасибо,

а если у меня не только имя уникальное, а все три столбца

PASSENGER_FIRST_NAME VARCHAR2(15),
PASSENGER_LAST_NAME VARCHAR2(15),
PASSENGER_COUNTRY VARCHAR2(30)
?
всмысле? то есть на данный момент у тебя повторений пассажиров нет, все пассажиры уникальны?
тогда просто update ... set id = rownum
или я тебя как-то не так понял?
14 янв 15, 20:20    [17119205]     Ответить | Цитировать Сообщить модератору
 Re: INSERT с подстановкой данных  [new]
Sunbelt
Member

Откуда:
Сообщений: 55
Добрый Э - Эх,

есть повторяющиеся пассажиры, есть и уникальные
14 янв 15, 20:32    [17119265]     Ответить | Цитировать Сообщить модератору
 Re: INSERT с подстановкой данных  [new]
stax..
Guest
Sunbelt
stax..,

спасибо,

а если у меня не только имя уникальное, а все три столбца

PASSENGER_FIRST_NAME VARCHAR2(15),
PASSENGER_LAST_NAME VARCHAR2(15),
PASSENGER_COUNTRY VARCHAR2(30)
?

distinct
PASSENGER_FIRST_NAME,PASSENGER_LAST_NAME,PASSENGER_COUNTRY


on
t.PASSENGER_FIRST_NAME= d.PASSENGER_FIRST_NAME
and
t.PASSENGER_LAST_NAME = d.PASSENGER_LAST_NAME
and
t.PASSENGER_COUNTRY= d.PASSENGER_COUNTRY


ps
без учета пробелов

.....
stax
14 янв 15, 22:14    [17119640]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить