我正在尝试使用select语句获取某个MySQL表中除了某一列之外的所有列。有没有简单的方法可以做到这一点?
编辑:该表中有53个列(不是我设计的)。
我正在尝试使用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>
和<columns_to_omit>
<column_name>
来围绕列名。 - adamF(不要在大表上尝试此操作,结果可能会令人惊讶!)
临时表
DROP TABLE IF EXISTS temp_tb;
CREATE TEMPORARY TABLE ENGINE=MEMORY temp_tb SELECT * FROM orig_tb;
ALTER TABLE temp_tb DROP col_a, DROP col_f,DROP col_z; #// MySQL
SELECT * FROM temp_tb;
DROP语法可能因数据库而异。@Denis Rozhnev
DROP TABLE IF EXISTS temp_tb;
。该命令的作用是删除名为 "temp_tb" 的数据表,如果该表存在的话。请注意,这个命令会导致该表及其所有数据被永久性地删除。 - gregn3CREATE TEMPORARY TABLE temp_tb ENGINE=MEMORY (SELECT * FROM orig_tb);
,否则默认保存到磁盘,并且可以在服务器重启后继续存在。(感谢) - gregn3在这种情况下,使用视图是否更好?
CREATE VIEW vwTable
as
SELECT
col1
, col2
, col3
, col..
, col53
FROM table
您可以做:
SELECT column1, column2, column4 FROM table WHERE whatever
如果你正在寻找更一般的解决方案,那么可以不获取column3。
如果您想要排除字段的值,例如出于安全考虑/敏感信息,您可以将该列检索为空。
例如:
SELECT *, NULL AS salary FROM users
salary
列。但由于它是在 * 后检索的,因此覆盖了原始列。虽然这不太美观,但它确实有效。 - Sean OSELECT col1, col2, col3, col4 FROM tbl
并手动选择您想要的列。但是,如果您需要许多列,则可能只需要执行以下操作:
SELECT * FROM tbl
忽略您不想要的部分。
对于您的特定情况,我建议:
SELECT * FROM tbl
除非你只需要几列数据。如果你只需要四列,那么:
SELECT col3, col6, col45, col 52 FROM tbl
如果只需要50个列,那么使用现有的代码就足够了,但是如果你希望查询结果有50列,那么生成这样一个查询的代码可能会变得(太)难以阅读。
在尝试 @Mahomedalid 和 @Junaid 的解决方案时,我发现了一个问题。所以想要分享一下。如果列名中有空格或连字符,例如“check-in”,则查询将失败。简单的解决方法是在列名周围使用反引号。修改后的查询如下:
SET @SQL = CONCAT('SELECT ', (SELECT GROUP_CONCAT(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;
table.
来获取特定表中的所有列,而不仅仅是指定
。select users.*, phone.meta_value as phone, zipcode.meta_value as zipcode from users left join user_meta as phone on ( (users.user_id = phone.user_id) AND (phone.meta_key = 'phone') ) left join user_meta as zipcode on ( (users.user_id = zipcode.user_id) AND (zipcode.meta_key = 'zipcode') )结果是来自用户表的所有列和两个从元数据表中连接的附加列。