andrystepa
25-03-2009, 16:54
База 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, все равно ответ тот же.
Как все-таки вставить эти записи? Хотя бы без пакетной вставки!
И, кроме того, как все это сделать с помощью пакетной вставки - сотрудников много.
Более точное описание таблиц такое:
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, все равно ответ тот же.
Как все-таки вставить эти записи? Хотя бы без пакетной вставки!