Изменить информацию таблицы

#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 условий получаете все возможные комбинации строк в таблицах, к которым вы присоединяетесь. Это может быть много строк.