2014-09-03 97 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) 

然後一起想也許使用秩()窗口函數來更新等標籤。