SQL 的 insert問題

Howdy,

請教一下

我現在有二個tables,欄位名稱如下

tableone

---------------

sid | cid | cname

=================

tabletwo

---------------

cid | s1 | s2 | s3 |

=================

兩個table的cid有關聯,

我現在想做的是將tabletwo的s1~s3的欄位資料分次

insert至tableone的sid

所以我先試將S1寫至SID打了下列語法

-----------------------------------

INSERT INTO tableone (sid)

SELECT s1 FROM tabletwo

WHERE cid='123'

可是不行

-------------------------------------

查了一下說明,是說該兩個table的欄位名稱要相同

那有其他的方法可以做嗎?

我是想說如果可以,再用c++寫個for-loop來重複寫入

可是連寫一個都不行了

請各位高手指點一下

謝謝呢!

已更新項目:

謝謝Tim 的回答

再請教一下

若我tableone的欄位增多的話

是否也需以此方式insert呢?

thanks

2 個已更新項目:

謝謝大家的意見

不過現在的問題是

我查詢一個table後,比如查有二筆資料

這兩筆資料的內容都一樣

只是其中一個欄位(假設欄位:num)要做update的動作

例如結果如下

tableone

sid ||  cid ||  cname || num

123 || 001 || abc || 1

123 || 001 || abc || 2

第一筆就改為1,第二筆改為2

我是用postgreSQL,看說明好像是用LIMIT/OFFSET?

有何建議嗎?謝謝

3 個解答

評分
  • 提姆
    Lv 5
    1 0 年前
    最佳解答

    INSERT INTO tableone

    SELECT s1, cid, null

    FROM tabletwo

    WHERE cid='123'

    2008-09-10 08:59:06 補充:

    如果用insert into .... select 的話就得新增相應的欄位,

    不然就只能用insert into table1('sid', 'cid') values (....)一筆一筆做了。

     

  • Lv 4
    1 0 年前

    你語法正確阿,有可能是你資料表中的欄位形態是否有不一樣,或是你的cid或cname有無設not null,因此那兩個欄位也必須填資料。大概想得到的事這兩個原因,另外還有可能就是sid如是primary key 你新增進去的s1不可以與sid的重複。

    如果有指定欄位→

    insert 的欄位數要與 select from tableone 的欄位數一樣

    例如 insert into tableone(sid,cid)

    select s1,cid from tabletwo

    where xxxxx

    因為沒看到你錯誤訊息,所以僅此回答!

    參考資料: 自己
  • 1 0 年前

    重點是

    insert into tableone(sid)

    select s1 from tabletwo

    where cid='123'

    1.insert into tableone 要 insert 的欄位數要與 select from tableone 的欄位數一樣

    例如 insert into tableone(1,2,3,4,5)

    select 6,7,8,9,10 from tabletwo

    where xxxxx

    如果省略 insert into tableone 欄位名稱

    select 的欄位就要依 tableone 全部依順序列上

    例如 insert into tableone

    select 6,7,8,9,10 from tabletwo

    where xxxxx

    2.每個對應欄位, 如 sid 與 s1 的資料型態(datatype)都是文字或數字或日期 與資料欄位長度(data_length) 要一樣,或 insert 的 sid 長度大於或等於 s1 欄位長度.不能小於 s1 長度

    3.沒有 insert 的欄位資料,不能有設 not null

    2008-09-17 23:21:10 補充:

    你可以在 update SQL 上用

    update tableone set num=rownum (或 num=to_char(rownum) )

    where cid='001' 來作變量增量的處理就可以了

還有問題?馬上發問,尋求解答。