Разделение данных из одной таблицы в другую

#sql-server

#sql-сервер

Вопрос:

У меня есть следующая таблица, которая в основном содержит название штата, название города и название коммуны (не уверен, что это так в некоторых странах), и у меня также есть идентификатор штата.

введите описание изображения здесь

Я сделал другой дизайн для таблицы, например:

Состояние

  • State_ID
  • Имя_статьи

Город

  • City_ID
  • Имя_города
  • State_ID

Сообщество

  • Commune_ID
  • Commune_name
  • City_ID

Мне удалось вставить штат и город в новую таблицу… но я не могу найти способ вставить коммуны.

Образец данных (из старой таблицы):

 1   Adrar   Adrar   Adrar   01
2   Adrar   Adrar   Bouda   01
3   Adrar   Adrar   Ouled Ahmed Tammi   01
4   Adrar   Aougrout    Aougrout    01
5   Adrar   Aougrout    Deldoul 01
6   Adrar   Aougrout    Metarfa 01
  

Итак, что я в основном хочу сделать здесь, это вставить третий столбец (Deldoul, Metarfa) в мою новую таблицу Commune … за исключением того, что у меня нет идентификатора города. У меня есть только имя. Я попытался получить идентификаторы из моей новой таблицы «City» следующим образом, но это не сработало:

 INSERT INTO DB2.dbo.Commune
SELECT commune,
(SELECT id_state from DB2.dbo.State
 INNER JOIN DB1.dbo.TabOld
 ON Daira = City_name)
 FROM [DB1].[dbo].TabOld
  

Есть мысли?

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

1. Заголовок не описывает ваш вопрос. Возможно, название «Разделение данных из одной таблицы в несколько таблиц» более запоминающееся. И можете ли вы описать столбец в старой таблице? Я не вижу названия города и названия штата на изображении.

2. @Vernou извиняется. Wilaya = Название штата = Название Daira города Commune = Название коммуны

Ответ №1:

В подзапросе вы можете напрямую использовать внешний столбец (не нужно присоединяться к внешней таблице), например :

 INSERT INTO DB2.dbo.Commune (Commune_Name, City_ID)
SELECT commune,
    (SELECT City_ID 
    from DB2.dbo.City
    join DB2.dbo.State on State.State_ID=City.State_ID
    where City_name=Daira and Willaya=State_Name)
FROM [DB1].[dbo].TabOld