Mysql SQL-基于列的内容拆分表

Mysql SQL-基于列的内容拆分表,mysql,sql-server,database,phpmyadmin,Mysql,Sql Server,Database,Phpmyadmin,我有一个大型数据库,大约50000行,20列,我想根据第三列FEATURE_类中的值分割数据。FEATURE_类的值都是VARCHAR类型的,我想创建许多表,我需要用许多较小的表替换单个的大表,每个表的标题都是原始表的FEATURE_类值 我不知道最好的方法是什么,我想创建一个临时表作为索引,每一行都有一个FEATURE_类的唯一值,然后迭代临时表并对临时表的每一行执行复制操作。我真的不知道从这里到哪里去,任何帮助/想法都将不胜感激。谢谢 基本思想是创建一组语句结果集,这些语句将为您创建表并填充

我有一个大型数据库,大约50000行,20列,我想根据第三列FEATURE_类中的值分割数据。FEATURE_类的值都是VARCHAR类型的,我想创建许多表,我需要用许多较小的表替换单个的大表,每个表的标题都是原始表的FEATURE_类值


我不知道最好的方法是什么,我想创建一个临时表作为索引,每一行都有一个FEATURE_类的唯一值,然后迭代临时表并对临时表的每一行执行复制操作。我真的不知道从这里到哪里去,任何帮助/想法都将不胜感激。谢谢

基本思想是创建一组语句结果集,这些语句将为您创建表并填充正确的数据。运行以下命令生成语句。然后,您可以手动复制/粘贴或从脚本中执行这些语句

SQL Server示例

如果在StutuyLyC类列中有任何特殊字符,您可能需要考虑在上面的脚本中移除它们,以防止无效或难以使用的表名。< /P> 例如:

...
    'SELECT * INTO [' + REPLACE(TableName.FEATURE_CLASS, '.', '') + '] FROM TableName WHERE FEATURE_CLASS = ''' + TableName.FEATURE_CLASS + ''';'
...
MySQL示例

这将为您提供类似以下内容的MySQL命令:

CREATE TABLE `feature_class_value` AS 
    SELECT * FROM DB1 
        WHERE FEATURE_CLASS = 'feature_class_value';

查看MySQL文档,了解有关创建表选择选项的更多信息。

50000行实际上并没有那么大。无论如何,我不清楚列数据。。。“feature_类”中的值是逗号分隔的列表还是其他情况?你们能在那个栏里贴一个数据的小例子吗?读这个!我同意@PaulT的观点。在这种情况下,5万行根本不算大。如果您的表大小存在性能问题,您可能只需要进行优化。我可以想象你也可能有其他的理由这样做。很抱歉打断你,但5万行不是很大。你真的不应该把桌子分成多个小桌子。如果你这样做,你的查询和维护问题就会成倍增加。我想我不知道如何生成这些语句。我已经试着在TableName发生适当更改的情况下运行您的查询,但是查询没有返回任何内容。顺便说一下,这在SQL选项卡phpMyAdmin中。就脚本编写而言,我是否能够在phpMyAdmin中运行SQL命令,根据FEATURE_类列中的SELECT DISTINCT创建表,然后可能在下面的语句中填充表?您能否提供您正在尝试的确切查询?SELECT DISTINCT'SELECT*INTO['+DB1.FEATURE_类+']从DB1开始,其中FEATURE_CLASS='+DB1.FEATURE_CLASS+';'从DB1I开始,我还尝试了其他各种修改过的查询,包括在表名上使用反引号,例如DB1而不是DB1。我认为问题在于您使用的是MySQL,而不是SQL Server。我看到您为这两个都添加了标记,并且我使用SQL Server运行了它。我更新了答案,加入了一个MySQL示例。
SELECT DISTINCT 
    CONCAT('CREATE TABLE `', DB1.FEATURE_CLASS, 
        '` AS SELECT * FROM DB1 WHERE FEATURE_CLASS = ''', 
        DB1.FEATURE_CLASS, ''';') AS statements
FROM DB1;
CREATE TABLE `feature_class_value` AS 
    SELECT * FROM DB1 
        WHERE FEATURE_CLASS = 'feature_class_value';