Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » MySQL - Как добавить запись в таблицу, имеющую внешний ключ

Ответить
Настройки темы
MySQL - Как добавить запись в таблицу, имеющую внешний ключ

Старожил


Сообщения: 201
Благодарности: 7

Профиль | Отправить PM | Цитировать


База MySQL. Есть таблица отделов Units со столбцами: Unit_Id, Unit_Name. Unit_Id - Primary key. Далее есть таблица сотрудников Users со столбцами User_Id, User_name, Unit_Id. User_Id - Primary key а Unit_Id естественно внешний ключ. Таблица отделось Units заполнена, а таблицу сотрудников надо будет заполнять (или добавлять/удалять) начальникам отделов. Начальник отдела знает только название своего отдела а идентификатор, естественно не знает. Как составить запрос на вставку (или удаление) сотрудника, чтобы идентификатор отдела был взят из таблицы отделов по его названию?
И, кроме того, как все это сделать с помощью пакетной вставки - сотрудников много.
Более точное описание таблиц такое:
Units
Код: Выделить весь код
 
mysql> DESCRIBE Units;
+-----------+----------------------+------+-----+---------+----------------+
| Field     | Type                 | Null | Key | Default | Extra          |
+-----------+----------------------+------+-----+---------+----------------+
| Unit_Id   | smallint(5) unsigned | NO   | PRI | NULL    | auto_increment |
| unit_name | varchar(30)          | YES  | UNI | NULL    |                |
+-----------+----------------------+------+-----+---------+----------------+
А таблица Users:

Код: Выделить весь код
 
mysql> DESCRIBE Users;
+-----------+----------------------+------+-----+---------+----------------+
| Field     | Type                 | Null | Key | Default | Extra          |
+-----------+----------------------+------+-----+---------+----------------+
| User_Id   | smallint(5) unsigned | NO   | PRI | NULL    | auto_increment |
| User_name | varchar(31)          | NO   | UNI |         |                |
| Unit_Id   | smallint(5) unsigned | YES  | MUL | NULL    |                |
+-----------+----------------------+------+-----+---------+----------------+
Пробовал такой метод вставки:
Код: Выделить весь код
Imysql> INSERT INTO Users(User_name) VALUES( 'Иванов И.' );
Query OK, 1 row affected (0.00 sec)

mysql> UPDATE Users SET Unit_id = (SELECT Unit_id FROM Units WHERE unit_name = 'Отдел Систем Управления')  WHERE Unit_Id = 0;
Query OK, 0 rows affected (0.00 sec)
Первый запрос прошел без проблем, а вот второй не удался. Даже если вместо вложенного запроса вставить реальную цифру из таблицы Units, все равно ответ тот же.
Как все-таки вставить эти записи? Хотя бы без пакетной вставки!

Отправлено: 16:54, 25-03-2009

 

Аватара для Delirium

Ветеран


Сообщения: 5624
Благодарности: 936

Профиль | Отправить PM | Цитировать


Цитата andrystepa:
Первый запрос прошел без проблем, а вот второй не удался »
Ну правильно. В первом случае вы вставляете записи, во втором обновляете существующие.

Что можно сделать:
Код: Выделить весь код
insert into USERS(user_name, unit_id) (select 'Иванов И.', unit_id from Units where unit_name='Отдел Систем Управления')

-------

Пройденные курсы:
[Microsoft №10174 Sharepoint], [SharePoint]
Мои проекты:[CheckAdmins], [NetSend7], [System Uptime], [Remote RAdmin LogViewer],[Netdom GDI], [Holidays - напоминалка о днях рождения]

А я офис-гуру :)


Отправлено: 01:43, 26-03-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 201
Благодарности: 7

Профиль | Отправить PM | Цитировать


Спасибо, разобрался. В моем втором запросе вместо WHERE Unit_Id = 0 надо было ставить WHERE Unit_Id IS NULL; так как NULL и 0 не одно и то же. Впрочем Delirium, - Ваш вариант получше будет - все-таки один запрос.

Отправлено: 15:24, 26-03-2009 | #3


Аватара для Delirium

Ветеран


Сообщения: 5624
Благодарности: 936

Профиль | Отправить PM | Цитировать


Всегда рады помочь

-------

Пройденные курсы:
[Microsoft №10174 Sharepoint], [SharePoint]
Мои проекты:[CheckAdmins], [NetSend7], [System Uptime], [Remote RAdmin LogViewer],[Netdom GDI], [Holidays - напоминалка о днях рождения]

А я офис-гуру :)


Отправлено: 02:01, 27-03-2009 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » MySQL - Как добавить запись в таблицу, имеющую внешний ключ

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - [решено] Как добавить ключ реестра, при условии что винда не загружается? Blast Microsoft Windows 2000/XP 56 26-01-2013 13:01
[решено] Добавить свою запись в Службу Windows Luidgy Хочу все знать 9 23-01-2011 19:33
Добавить запись в DNS в AD alex_39 Microsoft Windows NT/2000/2003 2 14-10-2009 15:57
Разное - Дополнительный HDD с другой версией ОС, добавить на нее учетную запись 7human7 Microsoft Windows Vista 3 02-10-2009 19:54
Как добавить ключ Guest Хочу все знать 1 29-02-2004 20:01




 
Переход