MySQL根据不同表中的值创建表

时间:2011-05-05 02:39:29

标签: php mysql database

根据另一个表中的值自动创建新表的正确方法是什么?例如,如果表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 :(得分:0)

  • 如果您打算创建新的 表城市有关城市的数据, 这意味着每个城市都有一排 继续阅读答案。

  • 另一方面,如果你是 计划为...制作新表 每个城市,列相同, 那你的计划是非常糟糕的设计。 首先阅读关于规范化的内容。


第一种方法是创建一个名为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

如果没有,(并且[{1}}的{​​{1}}会更小),您可以通过添加字段{{1}来Primary Key city的结构ALTER并删除table table_A字段。然后,使用cityid

完成两个表之间的city

第二个选项是直接创建表格城市:

JOIN

然后更改定义主键的表,添加(填充,状态等)。