Mysql: SELECT * FROM .... 没有一个字段
Posted
技术标签:
【中文标题】Mysql: SELECT * FROM .... 没有一个字段【英文标题】:Mysql: SELECT * FROM .... without one field 【发布时间】:2012-01-25 07:21:30 【问题描述】:对于复制条目,我想使用以下语法:
insert into TABLE select * from TABLE where ...
但是,由于第一列是自增主键,因此该值必须不同。我的解决方法是指定选择查询中的所有字段,而不是使用星号,然后将主键字段留空。由于我的表有 30 多个不幸地不断变化的字段,因此我正在寻找一种可以在脚本中实现并且在表结构发生变化时不需要修改的解决方案。有任何想法吗?非常感谢!
【问题讨论】:
不幸的是,实际上没有其他方法。请参阅我的问题SELECT * EXCEPT 与此类似。 【参考方案1】:例子:
mysql> create database dbase;
Query OK, 1 row affected (0.00 sec)
mysql> use dbase;
Database changed
mysql> create table tbl ( id integer not null primary key auto_increment, field2 integer, field3 integer );
Query OK, 0 rows affected (0.04 sec)
mysql> SET @sql = CONCAT ( 'SELECT ' , ( SELECT REPLACE ( GROUP_CONCAT( COLUMN_NAME ) , 'id,' , '' ) FROM INFORMATION_SCHEMA.COLUMNS WHERE T
ABLE_NAME = 'tbl' AND TABLE_SCHEMA = 'dbase'), ' FROM tbl');
Query OK, 0 rows affected (0.01 sec)
mysql> select @sql;
+-------------------------------+
| @sql |
+-------------------------------+
| SELECT field2,field3 FROM tbl |
+-------------------------------+
1 row in set (0.00 sec)
mysql>
现在你只需要准备和执行..
mysql> prepare stmt from @sql;
Query OK, 0 rows affected (0.00 sec)
Statement prepared
mysql> execute stmt;
Empty set (0.00 sec)
没有行返回,因为表中没有插入行。
现在插入并再次执行..
mysql> insert into tbl ( field2, field3 ) values ( 1 , 2 ) , ( 3 , 4 ) ;
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> execute stmt;
+--------+--------+
| field2 | field3 |
+--------+--------+
| 1 | 2 |
| 3 | 4 |
+--------+--------+
2 rows in set (0.00 sec)
返回除@sql中指定的'ID'之外的所有表字段
【讨论】:
【参考方案2】:MySQL 不提供消除此类字段的方法。但是,如果您知道您将始终需要除主键之外的所有字段,那么获取主键实际上也没有太多开销。在代码中排除主键会容易得多。
如果获取它真的很重要,您可以执行DESCRIBE TABLE
来获取列列表,然后构造您的查询。但是,这可能只会让事情变得更加复杂。我建议忽略主键。
【讨论】:
以上是关于Mysql: SELECT * FROM .... 没有一个字段的主要内容,如果未能解决你的问题,请参考以下文章
mysql之数据查询SELECT * FROM students; SELECT * FROM classes;