16

可能重复:
选择 MySQL 中除一列之外的所有列?

我想知道有没有一种方法可以从我的数据库中的表中选择除一个字段之外的所有字段。

我知道我可以描述选择查询中的字段名称。
例如:

SELECT fieldname1, fieldname2, fieldname3, fieldname4 FROM tablename;

但我的问题是,有没有办法以简单的方式做到这一点......像这样

SELECT * FROM tablename EXCEPT(fieldname3);

我正在使用 MySQL 和 Zend 框架。

4

3 回答 3

12

你可以很容易地做到这一点

假设您的字段是 id = 5

然后

   select * from your_table where id !=5 

如果你的意思是列

假设你不想选择column3

然后

   select column1,column2,column4 from tablename;

如果你有很多列

    SET @sql = CONCAT('SELECT ', (SELECT REPLACE(GROUP_CONCAT(COLUMN_NAME),  '<columns_to_delete>,', '') 
    FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '<table>'   AND TABLE_SCHEMA = '<database>'), ' FROM <table>');

    PREPARE stmt1 FROM @sql;
   EXECUTE stmt1;
于 2013-01-10T09:12:01.653 回答
7

是的,你可以从information_schema.columns

SET @sql = CONCAT('SELECT ', (SELECT GROUP_CONCAT(COLUMN_NAME) FROM 
information_schema.columns WHERE table_schema = 'dbo' AND table_name = 
'tablename' AND column_name NOT IN ('c1', 'c2')), 
' from dbo.tablename');  

PREPARE stmt1 FROM @sql;

EXECUTE stmt1;
于 2013-01-10T09:00:08.647 回答
6

试试这个 -

SHOW FIELDS FROM `tablename` WHERE FIELD NOT IN ('f1','f2','f3');

执行此查询并获取特定的字段名称并将每个字段名称放入一个数组中。然后在选择查询中使用“,”内爆数组。

$fields = implode(',',$fields_arr);
$sql = SELECT $fields FROM `tablename`;
于 2013-01-10T09:54:11.713 回答