MySQL создает таблицы на основе значений из другой таблицы - PullRequest
2 голосов
/ 05 мая 2011

Как правильно автоматически создавать новые таблицы на основе значений в другой таблице? Например, если таблица A имеет столбец с именем city, который содержит разные значения города, то мне нужно будет создать новую таблицу на основе каждого города. Затем все записи с соответствующим городом необходимо вставить в соответствующую таблицу. Кроме того, если в названии города есть пробел, его необходимо заменить на знак подчеркивания. Как то же самое можно сделать в MySQL?

В MS ACCESS я мог бы сделать это:

  1. Использование запроса выбора и замены SELREP

    SELECT table_A.column1, table_A.column2, table_A.city, Replace([city]," ","_") AS table_name_column FROM table_A;
    
  2. Создание публичной функции MakeTableCity

    Public Function MakeTableCity()
    DoCmd.SetWarnings False
    Dim db As Database
    Set db = Application.CurrentDb
    Dim distinctValues As DAO.Recordset
    Set distinctValues = db.OpenRecordset("SELECT table_name_column FROM SELREP GROUP BY table_name_column", dbOpenSnapshot)
    Do Until distinctValues.EOF
    DoCmd.RunSQL "SELECT * INTO " & distinctValues("table_name_column") & " FROM SELREP WHERE table_name_column ='" & distinctValues("table_name_column") & "'"
    distinctValues.MoveNext
    Loop
    DoCmd.SetWarnings True
    Set distinctValues = Nothing
    Set db = Nothing
    End Function
    

1 Ответ

0 голосов
/ 05 мая 2011
  • Если вы планируете создать новую таблицу city с данными о городах, то есть по одной строке для каждого города, тогда прочитайте ответ.

  • Если, с другой стороны, вы планируете создать новую таблицу для каждого города с одинаковыми столбцами, то ваш план очень плохой.Сначала прочитайте о нормализации.


Первая альтернатива - создать таблицу с именем city с необходимыми полями.Пример:

CREATE TABLE city
( id INT auto_increment PRIMARY KEY
, name VARCHAR(50) NOT NULL
, population INT
, state CHAR(2)
) ;

Затем скопируйте в него названия разных городов с помощью:

INSERT INTO city (name)
  ( SELECT DINSTINCT city     --- change "city" into REPLACE(city, ' ', '_')
    FROM table_A              --- for the small changes you want 
  ) ; 

Затем обновите другие поля (население, штат и т. Д.).

Если никакие два города не имеют одинакового названия, то JOIN между двумя таблицами можно сделать, используя ON table_A.city = city.name

Если нет, (и лучше в любом случае, так как Primary Key из city будет меньше), вы можете ALTER структуру table table_A, добавив поле cityid и опустив поле city.Затем JOIN s между двумя таблицами будет выполнено с использованием ON table_A.cityid = city.id


Второй вариант - создать город таблицы с помощью:

CREATE TABLE city AS
  ( SELECT DINSTINCT city AS name  --- change "city" into REPLACE(city, ' ', '_')
    FROM table_A                   --- for the small changes you want 
  ) ; 

и затем изменить таблицуопределение первичного ключа, добавление (население, штат и т. д.).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...