我试图使用一个选择语句从某个MySQL表中获得除一个以外的所有列。有什么简单的方法吗?

编辑:在这个表格中有53列(不是我的设计)


当前回答

我有一个建议,但不是解决办法。 如果您的一些列有较大的数据集,那么您应该尝试使用以下方法

SELECT *, LEFT(col1, 0) AS col1, LEFT(col2, 0) as col2 FROM table

其他回答

实际上有一种方法,当然你需要有权限才能这样做…

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;

替换<表>,<数据库>和< columns_to_省略>

我喜欢@Mahomedalid的回答,除了@Bill Karwin评论中提到的事实。@Jan Koritak提出的可能的问题是真的,我遇到过,但我找到了一个技巧,只是想在这里与面临这个问题的人分享。

我们可以在Prepared语句的子查询中用where子句替换replace函数,如下所示:

使用我的表和列名

SET @SQL = CONCAT('SELECT ', (SELECT GROUP_CONCAT(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'users' AND COLUMN_NAME NOT IN ('id')), ' FROM users');
PREPARE stmt1 FROM @SQL;
EXECUTE stmt1;

因此,这将只排除字段id,而不包括company_id

我同意@Mahomedalid的回答,但我不想做一些准备好的语句,我不想输入所有的字段,所以我有一个愚蠢的解决方案。

去phpmyadmin->sql->select表,它转储查询:复制,替换和完成!:)

如果它总是相同的一列,那么你可以创建一个不包含它的视图。

否则,不,我不这么认为。

视图在这种情况下工作得更好吗?

CREATE VIEW vwTable
as  
SELECT  
    col1  
    , col2  
    , col3  
    , col..  
    , col53  
FROM table