【发布时间】:2018-05-11 02:47:59
【问题描述】:
根据另一个表中的值自动创建新表的正确方法是什么?例如,如果表 A 有一个名为 city 的列,其中包含不同的城市值,那么我需要根据每个不同的城市创建一个新表。然后需要将具有相应城市的所有记录插入到相应的表中。此外,如果城市名称中包含空格,则需要将其替换为下划线。在 MySQL 中怎么能做到这一点?
在 MS ACCESS 中,我可以通过以下方式完成此操作:
-
使用名为 SELREP 的选择和替换查询
SELECT table_A.column1, table_A.column2, table_A.city, Replace([city]," ","_") AS table_name_column FROM table_A; -
创建一个公共函数 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
【问题讨论】:
-
为什么每个城市都需要一个单独的表格? MySQL 旨在处理将多个城市的数据放在一个表中。
-
确实,拥有多个结构相同的表是糟糕设计的强烈标志。它也是一种非规范化形式。
-
因此特定城市的用户可以轻松导航到他们自己的城市数据。
-
虽然你可以按城市分区,但你很可能会有相当不平衡的分区。 (例如,俄勒冈州波特兰的数据很可能比纽约州纽约少)
-
只需使用 WHERE 子句按城市名称过滤结果