我有一个表 MyTable ,有6列:
当我写:select * from MyTable我得到这个结果
NAME | LAST_NAME | FIRST_NAME |年龄| SALARY | ID
我想要的是改变他们的顺序,我希望ID在第一个不在lat
示例:当我编写查询select * from MyTable时,我希望结果如下:
ID | NAME | LAST_NAME | FIRST_NAME |年龄| SALARY
我为什么要这样?:这个表有一个程序,它接受我插入的内容,并使用解析器为我们创建另一个查询。
例如:如果我插入id = 1并且name = stack和last_name = over解析器将以这种方式进行:插入mytable值(1,'stack','over')(这是一个简单的例子,我的解析器很复杂)
所以你首先会问自己为什么需要这个?
因为我有20多个开发人员认为ID是第一个。
这一切都是在我尝试修改列ID时开始的,所以我不得不放弃它并再次重新创建列并添加约束并将NULL更改为NOT NULL,然后删除它我将数据放入临时列中,这样我没有丢失数据。但有一点我没看到的是列订单
好吧,我可以简单地告诉开发人员这个变化,但如果我这样做,我会被问到很多问题,我是怎么做到的,为什么。我不希望任何人知道(如果可能的话)
我脑海中的一个解决方案是使用正确的行创建一个新表。但是程序,触发器将被删除,我必须再次为该表添加它们,我担心重新创建表会遇到新的问题。
答案 0 :(得分:2)
请勿使用*
,请按所需顺序指定列,例如:
select ID, NAME, LAST_NAME, FIRST_NAME, AGE, SALARY from MyTable
如果必须重新排序列,请创建一个视图:
create view MyView as
select ID, NAME, LAST_NAME, FIRST_NAME, AGE, SALARY from MyTable
以便select * from MyView
返回您想要的内容。
*
只是一个方便的捷径。由于它不明确,因此在表中添加或删除列时可能会导致错误。在生产代码中使用它并不好。
不要创建另一个表,这太复杂了。