2013-10-09 74 views
1

鄉親更新查詢新列

我有一個表,如下

enter image description here

我們假設COUNTRYNAME列和結果後添加一個新的列即parent_country應如下

id parentid countryname    Parent_country 

39 0  Barbados      Barbados 
40 39  Barbados mobile    Barbados 
41 39  Mobile Digicel    Barbados 
42 0  Anguilla      Anguilla 
43 42  Anguilla Mobile    Anguilla 
44 42  hello Mobile Digicel   Anguilla 

感謝

+2

那你試試這麼遠嗎? – Sal00m

+0

我們只能更新爲parentid = 0 – dell

+0

在問題 – Paddyd

回答

4

我不認爲你應該添加一列。你正在破壞正常化的基本規則之一。這裏是一個查詢給你你需要的結果。

SELECT tbl.id as id 
    , tbl.parentid as parentid 
    , tbl.countryname as countryname 
    , COALESCE(parent.countryname, tbl.countryname) as Parent_country 
FROM tbl 
LEFT JOIN tbl AS parent 
ON tbl.parentid = parent.id 

並且更容易夠到變成一個視圖,其(當不可更新)可以模仿一個表用於讀的目的

CREATE VIEW tbl_trick_business_team AS 
SELECT tbl.id as id 
    , tbl.parentid as parentid 
    , tbl.countryname as countryname 
    , COALESCE(parent.countryname, tbl.countryname) as Parent_country 
FROM tbl 
LEFT JOIN tbl AS parent 
ON tbl.parentid = parent.id 
+0

感謝agRizzo,但我需要一個新的列(parent_country)在另一個表中使用。 – dell

+0

@ user1927716 - 我無法與您的業務需求爭論,這不是一個好的技術實踐。你可以使用一個視圖嗎? – AgRizzo

+0

您的查詢完全正確,但我們需要根據此結果更新基表。 – dell

0

你需要ID傳遞給$id變量,然後編寫查詢

UPDATE tablename SET Parent_country='Barbados' WHERE id='".$id."' LIMIT 1" 
+0

其約50萬條記錄.. – dell

+0

其中id ='「。$ id。」'設置限制500 – Punitha

+0

大聲笑,你在說構建查詢一個接一個? – Sal00m

1

不會增加一列,由於數據是具有可獲得自拍加入並打破標準化 - 您將在數據庫中使用更多空間。但是在某些情況下,速度可能會有所幫助。

,但如果你有,在這裏我們去

ALTER TABLE tablename ADD COLUMN p_name(text); 


UPDATE tablename 
INNER JOIN 
    (SELECT id, 
      parentid, 
      country_name 
    FROM tablename)a ON tablename.parent_id=a.id 
SET tablename.p_name=a.country_name;