排除SELECT语句中的某些列

时间:2009-10-02 15:32:28

标签: sql select

SELECT * from myTable WHERE some-condition;

的结果

我对所有10个列中的9个感兴趣。唯一的出路是明确指定9列?

我无法以某种方式指定我不想看到的列?

6 个答案:

答案 0 :(得分:11)

唯一的方法是列出所有9列。

如:

SELECT col1, col2, col3, col4, col5, col6, col7, col8, col9 FROM myTable

答案 1 :(得分:3)

不,你不能。 Sybase的选择列表的示例定义可以是found here,您可以轻松地找到其他DB的其他数据库

原因是标准的选择方法 - “*”(又名所有列)和列列表 - defined operations in relational Algebra ,而列的排除不是< / p>

此外,正如Joe的评论中所提到的,即使选择所有列,通常也认为明确指定列列表而不是“*”是一种好习惯。

原因是如果表模式更改在两个连接表中引入了相同命名的字段,则在连接查询中使用*可能会导致查询中断。

但是,当从一个非常广泛且经常变异的表中选择没有连接时,上述规则可能不适用,因为“*”可以实现良好的变更管理(您的查询是一个较少的地方来修复和释放时添加新列),特别是如果您有灵活的数据库检索代码,可以动态处理表定义中的列集而不是代码中指定的内容。 (例如,只要将新列添加到数据库中,100%的提取器和加载器就完全正常工作。)

答案 2 :(得分:2)

如果必须(无法想到原因),但您可以通过查询此表中的列来动态创建此select语句,并在where子句中排除一个列名。

不值得出现性能损失,混乱和维护问题。

答案 3 :(得分:1)

你实际上需要明确指定列(正如Luke所说,这是一个好习惯),这就是原因:

假设您在sql查询周围编写了一些代码/脚本。您现在在代码的不同位置有50个不同的选择。

突然你意识到,对于你正在研究的这个新功能,你需要另一个专栏(对称性,你正在进行清理,并且意识到一个列是无用的并浪费空间,尽管它更难)。

现在您处于以下两种情况之一:

  • 您在每个查询中明确说明了列:添加列是向后兼容的更改,只需对新功能进行编码并完成。
  • 您使用'*'运算符进行一些查询:您必须跟踪它们并将其全部修改。忘记一个人,这将是你的坟墓。

哦,我是否指定带有''选择器的查询需要更多时间才能执行,因为数据库实际上必须查询模型并开发''选择器?

道德:当你手动检查你的列是否正常(此时你真的需要检查所有内容)时,只使用'*'选择器,在代码中,只是诅咒他们或者他们将成为你的厄运。

答案 4 :(得分:0)

不,你不能(至少不是我所知道的任何SQL方言)。

最好明确指定列名,而不是使用SELECT *

答案 5 :(得分:0)

最后,您需要分别指定10列中的所有9列 - 但是有工具帮助可以帮助您更轻松地实现这一目标!

查看Red-Gate的SQL Prompt,它是SQL Server Management Studio和Visual Studio的intellisense-add-on。

在很多其他事情中,它允许你输入

SELECT * FROM MyTable

然后返回,将光标放在“*”之后,然后按TAB - 然后它会列出该表中的所有列,您可以调整该列表(例如删除一些你不喜欢的列表)需要)。

绝对无价 - 节省无意识打字的时间和小时数!非常值得许可证的价格,我会说。

强烈推荐!

马克