Форум программистов, компьютерный форум, киберфорум
Наши страницы

Oracle

Войти
Регистрация
Восстановить пароль
 
OkVa
0 / 0 / 0
Регистрация: 21.03.2014
Сообщений: 5
#1

Добавление строк в таблицу - Oracle

21.03.2014, 16:12. Просмотров 1040. Ответов 9
Метки нет (Все метки)

Здравствуйте, помогите решить следующую проблему:

Даны таблицы:

SQL
1
2
3
CREATE TABLE IDs(id NUMBER PRIMARY KEY);
CREATE TABLE Codes(code NUMBER PRIMARY KEY, id NUMBER);
ALTER TABLE Codes ADD CONSTRAINT fk_Codes$id FOREIGN KEY(id) REFERENCES IDs(id);
нужно составить один запрос, добавляющий в поле id таблицы Codes все значения столбца
id, которые есть в таблице IDs, но еще нет в таблице Codes.

По сути проблема в том, что таблица IDs имеет всего одну строку, когда Codes - 2. Поэтому возникла проблема с запросом INSERT INTO: в поле code по умолчанию вставляются пустые значения.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.03.2014, 16:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Добавление строк в таблицу (Oracle):

Добавление массива данных в таблицу - Oracle
ORACLE 9.2 для Win. В БД ORACLE существует несколько таблиц. Ежедневно информация в большом объеме (примерно от 2 до 6 Млн записей)...

Добавление строк с измененным столбцом - Oracle
Всем привет! Помогите реализовать следующее: Nomer cex mat priz 1. 221. M1 M 2. 222. M1. a 2. 222. M2....

Добавление данных в таблицу - Базы данных
Здравствуйте, подскажите пожалуйста sql запрос который будет выполнять перенос данных из одной таблицы формата dbf в другую аналогичную...

Добавление в dbf таблицу полей - Базы данных
Доброго времени суток! Нужна очень помощь!!! Необходимо в существующую dbf таблицу добавить поля procedure...

Как вставить в таблицу несколько строк? - Oracle
Друзья! То есть у меня никак не выходит. Вот такими командами я их вставляю и без толку: INSERT INTO Products(prod_id, vend_id,...

Данные по служащим некоторого учреждения сведены в таблицу "Служащие". Приведите таблицу к 1, 2, 3 нормальной - Базы данных

9
turbanoff
Модератор
Эксперт Java
3981 / 3716 / 462
Регистрация: 18.05.2010
Сообщений: 9,291
Записей в блоге: 11
Завершенные тесты: 1
21.03.2014, 20:56 #2
Цитата Сообщение от OkVa Посмотреть сообщение
в поле code по умолчанию вставляются пустые значения.
А какие значение должны вставляться? и откуда их брать?
0
OkVa
0 / 0 / 0
Регистрация: 21.03.2014
Сообщений: 5
22.03.2014, 10:31  [ТС] #3
В этом и есть проблема: какие и откуда брать значения для вставки в поле Code. Однозначно это числа больше нуля, да ещё и уникальные значения для поля Code.
0
turbanoff
Модератор
Эксперт Java
3981 / 3716 / 462
Регистрация: 18.05.2010
Сообщений: 9,291
Записей в блоге: 11
Завершенные тесты: 1
22.03.2014, 13:11 #4
OkVa, Обычно PK в Oracle генерируеют с помощью SEQUENCE-а. Вас этот вариант устроит?
0
OkVa
0 / 0 / 0
Регистрация: 21.03.2014
Сообщений: 5
22.03.2014, 14:15  [ТС] #5
Боюсь, что данные условия менять я не могу. Вообще говоря решение может содержать особенности любого представления SQL, ,будь то SQL server или Oracle, хотя Oracle в приоритете
0
Dukovsky
0 / 0 / 0
Регистрация: 09.12.2008
Сообщений: 9
24.03.2014, 14:05 #6
MySQL
1
Insert into CODES (ID) SELECT ID FROM IDS WHERE ID NOT IN(SELECT ID FROM CODES)
как то так наверно
0
OkVa
0 / 0 / 0
Регистрация: 21.03.2014
Сообщений: 5
24.03.2014, 14:27  [ТС] #7
Это решение не подойдёт. Этот запрос вставит в поле Сode таблицы Codes значения NULL, что непременно вызовет ошибку.
0
Dukovsky
0 / 0 / 0
Регистрация: 09.12.2008
Сообщений: 9
24.03.2014, 14:31 #8
на случай если данные не удаляются:

MySQL
1
Insert into CODES (ID,code) SELECT ID, (Select count(*)+1 from CODES) FROM IDS WHERE ID NOT IN(SELECT ID FROM CODES)
если не подходит то тогда RTFM курить и желательно вдумчиво
0
OkVa
0 / 0 / 0
Регистрация: 21.03.2014
Сообщений: 5
24.03.2014, 15:10  [ТС] #9
Почти то, что надо. Однако, вставляемые таким образом значениями в поле code, иногда могут пересекаться с уже существующими. Ваше решение подходит для добавления одной записи, но не для выборки
0
Grossmeister
Модератор
3220 / 2318 / 371
Регистрация: 21.01.2011
Сообщений: 10,328
24.03.2014, 15:19 #10
В Oracle только использование Sequence (или ее ручная реализация) может гарантировать уникальность.
Все варианты с MAX + 1, COUNT +1 и проч. годятся только для однопользовательской работы. При многопользовательской работе с данной таблицей постоянно будут возникать коллизии (дублирование номеров).
1
24.03.2014, 15:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.03.2014, 15:19
Привет! Вот еще темы с ответами:

Добавление строк в таблицу - JavaScript
Добрый вечер. подскажите пожалуйста, как правильно добавить строку в таблицу, с тем условием, чтобы имелась возможность изменять name...

Добавление строк в таблицу - jQuery
Подскажите, пожалуйста, как ограничить количество добавленных строк в таблице, можно добавить максимум 3 строчки. Строчки добавляются...

Добавление строк в таблицу - AngularJS
Доброго времени суток! Я новичок в этом деле, так что сильно не пинайте. Я вывожу данные из json файла в таблицу, заполняю ее естественно...

Добавление строк в таблицу - HTML, CSS
Всем привет! У меня есть таблица, состоящая из двух строк. Верхняя заголовок, нижняя для заполнения. И мне нужно сделать, чтобы была...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.