我有一个包含20列的大型数据库(约50,000行),我希望"拆分"数据基于第三列中的值(称为FEATURE_CLASS)。 FEATURE_CLASS的值都是VARCHAR()类型,我想要创建许多表,我需要用多个较小的表替换单个大表,每个表都使用原始表的FEATURE_CLASS值是
不确定最好的解决方法,我正在考虑创建一个临时表作为索引的行,每行都带有FEATURE_CLASS的唯一值,然后迭代临时表和对临时表的每一行执行复制操作。我不确定从哪里开始,任何帮助/想法都将不胜感激。谢谢!
答案 0 :(得分:0)
基本思想是创建一个语句结果集,为您创建表并填充正确的数据。运行以下命令以生成语句。然后,您可以手动(复制/粘贴)或从脚本中执行这些语句。
SQL Server示例
SELECT DISTINCT
'SELECT * INTO [' + TableName.FEATURE_CLASS + '] FROM TableName WHERE FEATURE_CLASS = ''' + TableName.FEATURE_CLASS + ''';'
FROM
TableName
如果FEATURE_CLASS列中有任何特殊字符,您可能需要考虑在上面的脚本中删除它们,以防止表名无效或难以使用。
例如:
...
'SELECT * INTO [' + REPLACE(TableName.FEATURE_CLASS, '.', '') + '] FROM TableName WHERE FEATURE_CLASS = ''' + TableName.FEATURE_CLASS + ''';'
...
MySQL示例
SELECT DISTINCT
CONCAT('CREATE TABLE `', DB1.FEATURE_CLASS,
'` AS SELECT * FROM DB1 WHERE FEATURE_CLASS = ''',
DB1.FEATURE_CLASS, ''';') AS statements
FROM DB1;
这将为您提供类似这样的MySQL命令:
CREATE TABLE `feature_class_value` AS
SELECT * FROM DB1
WHERE FEATURE_CLASS = 'feature_class_value';
查看MySQL文档以获取有关CREATE TABLE SELECT选项https://dev.mysql.com/doc/refman/5.7/en/create-table-select.html的更多信息。