2014-09-03 99 views
-1

我有一个表格,其中有两列subj-id,subj-name的格式如下。在表中的两行之间插入一行

101 Maths 
102 Science 
103 Biology 
201 Maths 
202 Science 
203 Biology 
204 Geography 
301 Maths 
302 Science 

现在我需要插入数学和科学之间的排物理学所有的地方它存在并表应如下

101 maths 
102 Physics 
103 Biology 
201 Maths 
202 Physics 
203 Science 
204 Biology 
205 Geography 
301 Maths 
302 Physics 
303 Science 

我从很长一段时间也有这个问题。我在这里只提到了三个插入。在实际问题中,我需要在超过50个地方的数学和科学之间进行插入。手动操作非常困难。 任何人都可以引导我需要遵循的方法来处理这种情况。

+1

为什么你需要重做ID? – 2014-09-03 17:41:45

+1

是提供这一行数据还是列?是PostgreSQL或MySQL?你有两个标签 – Kritner 2014-09-03 17:42:36

+1

没有理由你需要在数据库中做到这一点。使用数据库的美妙之处在于,您可以查询和塑造数据,只要您喜欢。你只需要通过。 – 2014-09-03 17:42:52

回答

3

SQL表代表无序的集合。没有“中间”(或第一个或最后一个或前一个或下一个)的概念。行简单地是;他们在桌子上。

查询返回结果集有订单。而且,您可以在编写查询时控制订单。这就是为什么你使用order by条款。当你写:

select * 
from mytable; 

结果是以任何顺序,数据库想要返回它们。根本没有保证。相反,查询数据库为:

select * 
from mytable 
order by col1; 

而且您将获得正确排序的数据。

故事的寓意:只需将数据插入表格即可。当您查询它时,请使用order by子句以您想要的顺序获得结果。

+0

我已经有一个5000行的表格,我需要在问题中提到的50个位置插入一些行,这不能手动完成。 – Dileep 2014-09-03 17:55:19

1

嗯。

它似乎没有使用行和列,因为它们是在数据库中使用的。

但是,对于你的问题的解决方案会做这样的:

每数学,开始一个新行:

ID Stuff 
100 Maths Science Biology 
200 Maths Science Biology Geography 
300 Maths Science 

以读取该数据的结构,你将开始第一个指数,为字符串中的每个条目添加1。

例如,在 “扩大”,

100 Maths Science Biology 

将成为

Maths = ID + 1 
Science = ID + 2 
Biology = ID + 3 

...

现在,添加一个新的Stuff

当一个新东西被添加,找到它应该在哪里插入它的地方,然后当你“展开”字符串再次,新插入的顺序。

100 Maths Physics Science Biology 

将成为

Maths = ID + 1 = 101 
Physics = ID + 2 = 102 
Science = ID + 3 = 103 
Biology = ID + 4 = 104 

...

0

正如其他人所指出的关系型数据库是不是真的意味着与有序列表的工作。 你可以找出一些复杂的解决方案,例如选择“数学”行,然后选择“科学”行,然后使用它插入“物理”行。

喜欢的东西:

CREATE TABLE temp_table AS 
(
(SELECT 
t1.id+1 AS id, 
'Physics' AS course 
FROM 
table t1 JOIN table t2 
ON 
t1.course='Maths' AND t2.course='Science' AND t1.id+1=t2.id) 
UNION 
SELECT * FROM TABLE) 

然后一起想也许使用秩()窗口函数来更新等标签。