我在Oracle DB中执行一个简单的SELECT语句,需要按特定的顺序选择列。例如:
表A有100个属性,其中一个是“章”,它出现在表中列的某个位置。我需要首先选择带有“章节”的数据,然后选择其余的列,而不是特定的顺序。基本上,我的陈述需要阅读如下内容:
SELECT a.chapter, a. *the remaining columns* FROM A
此外,我不能简单地输入:
SELECT a.chapter, a.*
因为这会选择“章节”两次。
我知道SQL语句看起来很简单,但如果我知道如何解决这个问题,我可以将这个思想推断到更复杂的领域。另外,我们假设我不能只是滚动查找“章节”列并将其拖到开头。
感谢。
答案 0 :(得分:7)
您不应该在程序中选择*。随着您的架构的发展,它将引入您还不知道的东西。想想当有人在其中添加整本书的列时会发生什么?您认为非常便宜的查询突然开始带来数兆字节的数据。
这意味着你有来指定你需要的每一列。
答案 1 :(得分:6)
您最好的选择是明确选择每一列。
答案 2 :(得分:5)
快速解决这个问题的方法是SELECT a.chapter AS chapterCol,a。* FROM table a;这意味着将有一个列名称chapterCol(假设已经没有名为chapterCol的列。;)
答案 3 :(得分:4)
如果您要将'SELECT *'嵌入到程序代码中,那么我强烈建议不要这样做。正如前面的作者所指出的那样,如果列被添加到表中(或从表中删除),则设置代码以中断。简单的建议是不要这样做。
如果您在开发工具中使用此功能(查看数据等)。然后,我建议使用您需要的特定列顺序创建视图。从'SELECT COLUMN_NAME FROM ALL_TAB_COLUMNS'捕获输出,并使用您需要的列顺序为视图创建select语句。
答案 4 :(得分:2)
这就是我如何构建您的查询而不必输入所有名称,但需要手动操作。
以“选择a.chapter”开头
现在在数据库上执行另一个选择,如下所示:
选择','||列名 来自user_tab_cols 其中table_name = your_real_table_name 和column_name<> '章';
现在以剪切和粘贴的方式从中获取输出并将其附加到您开始时的内容。现在运行该查询。它应该是你要求的。
钽哒!
答案 5 :(得分:0)
除非您有充分的理由这样做,否则不应在查询中使用SELECT *。每次架构更改时,它都会破坏您的应用程序。