繁体   English   中英

SQL SELECT * 来自表(隐藏 1 列)

[英]SQL SELECT * FROM tbl (HIDE 1 COLUMN)

我正在尝试执行SELECT * FROM tbl ,但在 20 列中我不想选择 1 个特定列。 有动态的方法吗? 只是讨厌在查询中指定 19 列!

只需指定列。 无论如何你应该一直这样做,因为 select * 是一个非常糟糕的编程选择。 我不知道 mysql 但在 SQL 服务器中我可以将所有列从 object 浏览器拖过来并删除我不想要的列,这需要几秒钟。 也许您使用的界面具有类似的功能。

试试这个。 正如他所说,SQL 并不漂亮。

Select 除 MySQL 中的一列外的所有列?

那么你(或我)可以花一点时间编写一些动态 sql 来查询表中的列,生成一个 sql 语句减去你想要忽略的列,然后执行该动态 sql。

或者,您可以深吸一口气,然后将其编码为 19 列。

我知道我会选择哪个。 我知道哪种方式更易于维护且更不容易出错。

DELIMITER ;;
CREATE PROCEDURE sp_hide_cols_sql_all(v_table varchar(60))
BEGIN

 DECLARE v_query VARCHAR(1000);

    SELECT CONCAT('SELECT ', GROUP_CONCAT(distinct c.column_name) , ' FROM  ',v_table) INTO v_query from information_schema.`COLUMNS` c where c.table_name = v_table and c.column_name<>'id' and table_schema=DATABASE();

           SET @sql = v_query;
           PREPARE stmt FROM @sql;
           EXECUTE stmt;
           DEALLOCATE PREPARE stmt;
END ;;
DELIMITER ;

CALL sp_hide_cols_sql_all('table_name');

有趣的问题,但直接的答案是否定的,那是不可能的。 但是,您可以使用视图或存储过程,让您一次写出 19 列,然后使用SELECT * FROM viewexec storedproc调用存储过程或视图

这里唯一的问题是,如果您向表中添加/删除/重命名列,则需要更新 object(视图或存储过程)以反映新的/删除/重命名的列。

insd of star 写入需要的列名 在那,,ei 是

SELECT name,password...etc FROM tbl

我会同意所有的答案。 做“select * from ...”的优点

然而,如果你真的想要,你可以做一个“select *”到一个临时表,做一个“alter table”来删除你不想要的列,然后做一个“select *”从临时表。

仍然...不是很好,因为要点是,如果您的表结构发生变化(并获得一些额外的列),您选择的数据的消费者现在将获得比他们预期更多的东西。 在大多数情况下,“选择 *”只是懒惰的编码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM