#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, ГДЕ СУЩЕСТВУЕТ (ВЫБЕРИТЕ …).