#mysql #sql #sql-update
#mysql #sql #sql-обновление
Вопрос:
У меня есть два стола Отдел и Сотрудник
В таблице отделов у меня есть идентификатор отдела и имя отдела. В таблице сотрудников у меня есть идентификатор сотрудника, имя сотрудника, имя отдела
Я делаю мини-проект в .NET, а также использую некоторые SQL-запросы для редактирования, добавления и т. Д.
Что я хочу сделать?
Если я отредактирую имя отдела в таблице Отделов, я хочу также обновить в разделе Сотрудник имя отдела для всех сотрудников, которым присвоено это имя отдела.
Например, если я отредактирую имя отдела из таблицы Отдела из Службы поддержки в Центр обработки вызовов, я хочу обновить его также в то же время в таблице сотрудников для всех сотрудников, которые находятся в отделе поддержки
Таблица отдела
---------- ---------- | DepId | DepName | ---------- ---------- | 1 | Support | | 2 | Testing | | 3 | HR | ---------- ----------
Таблица Сотрудников
Сотрудник | Имя сотрудника | Имя депо |
---|---|---|
1 | Джон | Поддержка |
2 | Майк | Тестирование |
3 | Патрик | эйчар |
4 | Марк | Поддержка |
Можете ли вы помочь мне с решением/запросом для этого?
Комментарии:
1. MySQL lt;gt; SQL Server — пожалуйста, исправьте свои теги.
2. В соответствии с руководством по вопросам, пожалуйста, покажите, что вы пробовали, и расскажите нам, что вы нашли (на этом сайте или где-либо еще) и почему это не соответствовало вашим потребностям.
3. не сохраняйте название отдела, сохраните номер отдела, и все проблемы будут решены
4. Я предлагаю вам потратить некоторое время на изучение того, как создавать реляционные базы данных. Это навык, которому необходимо научиться — он не возникает волшебным образом при изучении SQL.
Ответ №1:
Вместо сохранения названия отдела вам нужно будет сохранить идентификационный номер отдела, чтобы вы могли присоединиться к таблицам/ соединить их/ сопоставить строки и т.д.
Затем вы захотите создать триггер, чтобы при обновлении таблицы вашего отдела также обновлялась таблица сотрудников.
CREATE OR REPLACE TRIGGER your_trigger_name BEFORE UPDATE ON DepartmentTableName FOR EACH ROW BEGIN if :new.deptid != :old.deptid then UPDATE EmployeeTable e set e.deptid = :new.deptid where e.deptid = :new.id; end if; END;
Конечно, этот триггер срабатывает, если вы меняете идентификационные номера.
Если вы просто соедините две таблицы внешним ключом в таблице сотрудников, подключив его к первичному ключу таблицы отдела, то каждый раз, когда вы редактируете фактическое название отдела, поскольку идентификатор отдела остается неизменным, исправленное имя отдела будет перенесено при объединении таблиц, поскольку таблицы соединены идентификатором, а не фактическим названием отдела.