MySQL: Попытка заполнить данные в один столбец из другой таблицы

#mysql #sql #merge

#mysql #sql #слияние

Вопрос:

Таблица A содержит несколько столбцов, в том числе FirstName , а LastName в таблице B есть разные столбцы, в том числе FirstName , LastName и EmployeeID

Я добавил EmployeeID в таблицу A. Теперь я хочу заполнить таблицу A Employee ID из таблицы B Employee ID , используя имя и фамилию (в настоящее время у нас никто не работает с таким именем — дизайн этой таблицы был таким странным)

Я предпринял несколько попыток, но продолжаю возвращаться к

 INSERT INTO TableA (EMPLOYEE_ID) A
SELECT B.EMPLOYEE_ID FROM TableB B
WHERE A.First_name = B.First_name
AND A.Last_name = B.Last_name
  

Но я продолжаю получать синтаксическую ошибку — версия сервера MySQL для правильного синтаксиса для использования рядом с A. Я не знаю, как использовать этот синтаксис при работе с Insert операторами, я думаю, и правильно ли это вообще.

Ответ №1:

Похоже, у вас уже есть данные в TableA, которые вы хотите обновить. Если это так, вам нужно использовать UPDATE инструкцию. Вот пример:

 UPDATE TableA A
SET EMPLOYEE_ID =
  (SELECT EMPLOYEE_ID
   FROM TableB B
   WHERE B.First_name = A.First_name
   AND B.Last_name = A.Last_name)
WHERE EXISTS
  (SELECT EMPLOYEE_ID
   FROM TableB B
   WHERE B.First_name = A.First_name
   AND B.Last_name = A.Last_name)
  

Комментарии:

1. Сработало отлично, спасибо. Я очень устал от своих навыков SQL, поэтому я полностью забыл об обновлении

2. Я получаю ошибку, подобную этой: Подзапрос возвращает более 1 строки . Любые предложения по этому поводу.

3. Для обновления нескольких записей здесь используется удивительный способ exists.

Ответ №2:

Вопрос: Гарантируется ли уникальность имени и фамилии?

Кроме того, это должно быть обновление.

 UPDATE TableA A
SET a.employee_id = (SELECT employee_id FROM TableB WHERE first_name = a.first_name AND last_name = a.last_name)
WHERE EXISTS (SELECT 1 FROM TableB WHERE first_name = a.first_name AND last_name = a.last_name)
  

Комментарии:

1. Они есть. На данный момент в компании всего 20 человек, поэтому мне нужно было разобраться с этим, прежде чем мы начнем расти. Я не знаю, почему кто-то подумал, что хорошей идеей было не включать ключ в имена сотрудников

2. Почему мы должны частично обновлять? Первая часть — прямая (Выберите ..), а вторая часть — ГДЕ СУЩЕСТВУЕТ (Выберите)? Возможно ли использовать только WHERE EXISTS? Это означает: ОБНОВИТЕ таблицуаустановите.employee_id, ГДЕ СУЩЕСТВУЕТ (ВЫБЕРИТЕ …).