我想知道有没有办法从数据库中的表中选择除一个字段之外的所有字段。
我知道我可以在选择查询中描述字段名称 例如:
SELECT fieldname1, fieldname2, fieldname3, fieldname4 FROM tablename;
但我的问题是,有没有办法以简单的方式做到这一点......就像这样
SELECT * FROM tablename EXCEPT(fieldname3);
我正在使用MySQL和Zend框架。
答案 0 :(得分:13)
你可以轻松地做到这一点
假设您的字段是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;
答案 1 :(得分: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;
答案 2 :(得分:5)
试试这个 -
SHOW FIELDS FROM `tablename` WHERE FIELD NOT IN ('f1','f2','f3');
执行此查询并获取特定的字段名称,并将每个字段名称放入一个数组中。 然后在select查询中使用','内爆数组。
$fields = implode(',',$fields_arr);
$sql = SELECT $fields FROM `tablename`;