2016-03-17 142 views
0

SQL Server中有這個腳本需要在PostgreSQL中轉換。 下面是腳本:將SQL Server腳本轉換爲PostgreSQL

UPDATE Categories_convert SET Categories_convert.ParentID = 
Categories_convert_1.CategoryID 
FROM Categories_convert LEFT OUTER JOIN Categories_convert AS 
Categories_convert_1 ON Categories_convert.MainGroupID_FK = 
Categories_convert_1.MainGroupID 
WHERE (((Categories_convert.Level)=2)); 

然後我試圖將其轉換爲Postgres的。下面是該腳本:

UPDATE x_tmp_categories_convert SET orig.parentid = 
cat2.categoryid 
FROM x_tmp_categories_convert LEFT OUTER JOIN x_tmp_categories_convert AS 
cat2 ON x_tmp_categories_convert.maingroupid_fk = 
x_tmp_categories_convert.maingroupid 
WHERE (((cat.level)=2)); 

請注意,我已經創建的表Categories_convert的SQLServer的到PostgreSQL,並更名爲x_tmp_categories_convert。 postgresql中的所有字段都是小寫字母。

現在的問題是,當我執行該腳本轉換到PostgreSQL,就會發生錯誤:

ERROR: table name "x_tmp_categories_convert" specified more than once SQL state: 42712

我做錯了在轉換?

UPDATE:

我已經試過@a_horse_with_no_name的答案,但它並沒有在所有的更新記錄。字段字段仍爲空。它應該基於maingoupid_fk映射該類別的所有參數。

下面是執行建議腳本後的​​記錄快照。 由於披露原因,我選擇了名稱。

Records snapshot link

更新版: 我使用PHP來遷移數據,以便原諒我使用的變量。 下面是執行質疑更新腳本之前使用的2個INSERT語句:

INSERT INTO x_tmp_categories_convert(maingroupid,name,vendorid,level,parentid) 
VALUES ($id,'$mainGroup',$vendorID,1,Null); 

INSERT INTO x_tmp_categories_convert(subgroupid,maingroupid_fk,name,vendorid,level) 
VALUES ($id,'$mainGroupId','$subGroup',$vendorID,2); 

而且,這是x_tmp_categories_convert表的表定義:

CREATE TABLE x_tmp_categories_convert 
(
    categoryid serial NOT NULL, 
    parentid double precision, 
    name character varying(255), 
    level double precision, 
    vendorid double precision, 
    maingroupid integer, 
    subgroupid integer, 
    maingroupid_fk integer, 
    pageid integer, 
    subgroupid_fk integer, 
    CONSTRAINT code_pk PRIMARY KEY (categoryid) 
) 
WITH (
    OIDS=FALSE 
); 

UPDATE V3: 已經求解a_horse_with_no_name。謝謝

+0

請將示例數據和表格定義添加爲_formatted_文本(理想的SQL插入語句),[請不要截圖](http://meta.stackoverflow.com/questions/285551/why-may-i-not上傳圖像的代碼的時候,問一個問題/ 285557#285557) –

+0

我已經添加了額外的信息的問題。 – ExcellenceIsLife

+0

@a_horse_with_no_name:我已經更新了這個問題。請 – ExcellenceIsLife

回答

0

我已編輯@a_horse_with_no_name的答案,並使其工作。我想這只是一個複製粘貼錯誤。

下面是最終腳本:

UPDATE x_tmp_categories_convert 
    SET parentid = cat.categoryid 
FROM x_tmp_categories_convert AS cat 
WHERE x_tmp_categories_convert.maingroupid_fk = cat.maingroupid 
AND x_tmp_categories_convert.level = 2; 

對於@a_horse_with_no_name,我很感謝你,因爲我不能想出沒有你的幫助的解決方案。爲你+1人。謝謝

+0

我刪除了我的答案,因爲它沒有解決您的問題。 –

+0

@a_horse_with_no_name:雖然可以。我只是認爲它是解決我的問題的墊腳石。在你回答我的線索之前,我不知道我可以在不加入表格的情況下做一個簡單的腳本。還有一件事,你的回答是正確的。你只需複製粘貼錯誤1個詞在你的解決方案。我只是將其更改爲「x_tmp_categories_convert.level = 2」,而不是「cat.level = 2」。所以,我非常確定這是你回答我的問題時的意思。謝謝 – ExcellenceIsLife

+0

@a_horse_with_no_name:另外,請再次添加您的答案,以便我可以將其標記爲答案。 – ExcellenceIsLife