我正在尝试使用select语句从某个MySQL表中获取除一个以外的所有列。有没有简单的方法可以做到这一点?
编辑:此表中有53列(不是我的设计)
实际上有一种方法,你当然需要具有执行此操作的权限...
SET @sql = CONCAT('SELECT ', (SELECT REPLACE(GROUP_CONCAT(COLUMN_NAME), '<columns_to_omit>,', '') FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '<table>' AND TABLE_SCHEMA = '<database>'), ' FROM <table>');
PREPARE stmt1 FROM @sql;
EXECUTE stmt1;
更换 <table>, <database> and <columns_to_omit>
警告:INFORMATION_SCHEMA查询的性能很差,因此请注意,这种查询对于任何事物都不是关键路径。
就像下面的@Jan Koritak一样,如果要删除的标题列也是要保留的任何列的标题的子字符串,则此答案实际上无效。有一个更好的答案与此类似,可以在这里找到。
这比仅指定列(这是已知的最佳实践)要糟糕得多。
如果列名中有空格,则此方法不起作用。应该对其进行更新以始终将名称括在反引号中
<column_name>
如果要忽略的列是表结构中列出的最后一个列,这也将不起作用(因为替换将不匹配尾随的逗号)。