我们都知道,要从表中选择所有列,可以使用
SELECT * FROM tableA
是否有一种方法可以在不指定所有列的情况下从表中排除列?
SELECT * [except columnA] FROM tableA
我所知道的唯一方法是手动指定所有列并排除不需要的列。这真的很耗时,所以我正在寻找方法来节省时间和精力,以及未来的维护表应该有更多/更少的列。
我们都知道,要从表中选择所有列,可以使用
SELECT * FROM tableA
是否有一种方法可以在不指定所有列的情况下从表中排除列?
SELECT * [except columnA] FROM tableA
我所知道的唯一方法是手动指定所有列并排除不需要的列。这真的很耗时,所以我正在寻找方法来节省时间和精力,以及未来的维护表应该有更多/更少的列。
当前回答
No.
轻维护的最佳实践是只指定所需的列。
至少有两个原因:
这使得客户端和数据库之间的契约是稳定的。每次都是相同的数据 性能,涵盖指标
编辑(2011年7月):
如果您从对象资源管理器中拖动表的列节点,它会在查询窗口中为您放置一个CSV列列表,从而实现您的目标之一
其他回答
在SQL Management Studio中,您可以展开对象资源管理器中的列,然后将columns树项拖到查询窗口中,以获得以逗号分隔的列列表。
您可以使用REGEX列规范。
下面的查询选择除ds和hr之外的所有列 选择(ds |人力资源)? +。+来自销售
如果您有许多列,而您只想排除其中一列。您可以使用下面的命令 从表中选择* exclude(列名)
下面是生成在查询中使用的列的列表(不是自动查询,因为这没有指定):
SELECT
GROUP_CONCAT(
CONCAT('`', `COLUMN_NAME`, '`')
SEPARATOR ',\n'
) AS `cols`
FROM information_schema.`COLUMNS`
WHERE `TABLE_SCHEMA` = 'db'
AND `TABLE_NAME` = 'table_name_here'
AND `COLUMN_NAME` NOT IN ('exclude_col1', 'exclude_col2')
会产生:
`included_col1`,
`included_col2`,
`included_col3`
然后你可以复制这个在查询中使用:
SELECT
`included_col1`,
`included_col2`,
`included_col3`
FROM db.table_name_here
如果有人像我一样使用MySql,请使用这个:
CREATE TABLE TempTable AS SELECT * FROM #YourTable;
ALTER TABLE TempTable
DROP COLUMN #YourColumn;
SELECT * FROM TempTable;
DROP TABLE TempTable;