#mysql #sql
#mysql #sql
Вопрос:
У меня есть три таблицы:
Таблица 1: (Потребитель)
UserName | FirstName | LastName
'Magika12' 'Ronald' 'Ludwig'
Таблица 2: (Местоположение пользователя)
UserName | LocationID
'Magika12' 13234
Таблица 3: (Местоположение)
LocationID | StreetNumber | StreetName | Suburb | City | Postalcode
13234 13 Baker Street Melton Brisbane 4242
И я хотел бы вместо этого изменить адрес Magika12
на this:
"124 Braelands Crescent, Albion, Melbourne, 9999"
В результате чего новая таблица будет выглядеть следующим образом:
LocationID | StreetNumber | StreetName | Suburb | City | Postal code
13234 124 Braelands Crescent Albion Melbourne 9999
Я пробовал что-то вроде этого:
UPDATE
L1
SET
L1.StreetNumber = 124,
L1.StreetName = 'Braelands Crescent',
L1.Suburb = 'Albion' ,
L1.City = 'Melbourne',
L1.Postalcode = 9999
FROM Location L1
INNER JOIN ConsumerLocation
WHERE ConsumerLocation.UserName = 'Magika'
Я знаю, что это неверно, но я не уверен, как соединить все таблицы вместе, чтобы обновить адрес Magika12
. Я создал UserName
первичный ключ Consumer
и первичный внешний ключ ConsumerLocation
. И LocationId
первичный ключ Location
и первичный внешний ключ Consumer Location
.
Любая помощь будет оценена
Ответ №1:
Вы пропустили условие join
инструкции. Должно быть так:
UPDATE
Location L1
INNER JOIN ConsumerLocation c on c.LocationID=L1.LocationID -- miseed on
SET
L1.StreetNumber = 124,
L1.StreetName = 'Braelands Crescent',
L1.Suburb = 'Albion' ,
L1.City = 'Melbourne',
L1.Postalcode = 9999
WHERE c.UserName = 'Magika'
Ответ №2:
UPDATE
Location L1
JOIN ConsumerLocation CL ON CL.LocationID = L1.LocationID
SET
L1.StreetNumber = 124,
L1.StreetName = 'Braelands Crescent',
L1.Suburb = 'Albion' ,
L1.City = 'Melbourne',
L1.Postalcode = 9999
WHERE CL.UserName = 'Magika12';
В случае, если у вас есть несколько записей о местоположении, связанных с одним и тем же именем пользователя, добавьте в предложение WHERE LocationID:
WHERE CL.UserName = 'Magika12' AND CL.LocationID = 13234
Ответ №3:
Для вашего соединения требуется ON
условие… попробуйте это.
INNER JOIN ConsumerLocation ON Location.LocationId = ConsumerLocation.LocationId
Когда вы JOIN
без каких-либо ON
условий получаете все возможные комбинации строк в таблицах, к которым вы присоединяетесь. Это может быть много строк.