Обновите значения во второй таблице после редактирования в первой таблице

#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;  

Конечно, этот триггер срабатывает, если вы меняете идентификационные номера.

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