SELECT * from myTable WHERE some-condition;
的结果
我对所有10个列中的9个感兴趣。唯一的出路是明确指定9列?
我无法以某种方式指定我不想看到的列?
答案 0 :(得分:11)
唯一的方法是列出所有9列。
如:
SELECT col1, col2, col3, col4, col5, col6, col7, col8, col9 FROM myTable
答案 1 :(得分:3)
原因是标准的选择方法 - “*”(又名所有列)和列列表 - 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
- 然后它会列出该表中的所有列,您可以调整该列表(例如删除一些你不喜欢的列表)需要)。
绝对无价 - 节省无意识打字的时间和小时数!非常值得许可证的价格,我会说。
强烈推荐!
马克