SQL SELECT * FROM tbl(隐藏1列)

时间:2011-06-21 14:25:47

标签: mysql sql sql-server select

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

7 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:2)

试一试。就像他说的那样,SQL并不漂亮。

Select all columns except one in MySQL?

答案 2 :(得分:1)

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

或者你可以深呼吸并为19列编码。

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

答案 3 :(得分:0)

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

调用存储过程或视图

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

答案 4 :(得分:0)

坚持明星写所需的列名在那里,, e.i是

SELECT name,password...etc FROM tbl

答案 5 :(得分:0)

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

但是,如果你真的想要,你可以在临时表中做一个“select *”,做一个“alter table”来删除你不想要的列,然后从临时表中执行“select *”。

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

答案 6 :(得分:0)

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');