2013-04-02 146 views
1

這是我試圖完成查詢:如何更新mysql中另一個表中的多個字段?

update amdashboard 
set (ASCID, ASCFirst, ASCLast, ASCOtherName, ASCAdd1, ASCAdd2, 
    ASCCity, ASCState, ASCZip, ASCZip4, ASCY2007, ASCY2008, ASCY2009, 
    ASCY2010, ASCY2011, ASCY2012, ASCEthnicity, ASCGender, ASCMaritalStatus) 
= (select id, firstname, lastname, listingspousename, add1, add2, 
      city, state, zip, zip4, y2007, y2008, y2009, 
      y2010, y2011, y2012, Ethnicity, Gender, MaritialStatus 
    from ASCNCOAClean 
      inner join amdashboard 
      on ASCNCOAClean.firstname = amdashboard.actorsfirst 
      and ascncoaclean.lastname = amdashboard.actorslast) 
    where exists (select id, firstname, lastname, listingspousename, 
         add1, add2, city, state, zip, zip4, y2007, y2008, 
         y2009, y2010, y2011, y2012, Ethnicity, Gender, 
         MaritialStatus 
        from ASCNCOAClean 
         inner join amdashboard 
         on ASCNCOAClean.firstname = amdashboard.actorsfirst 
         and ascncoaclean.lastname = amdashboard.actorslast); 

我不能得到這個工作......在第一個括號收到一個語法錯誤。所以,我想我只會嘗試一個領域。我嘗試這樣做:

update amdashboard 
set ascid = (select ascncoaclean.id 
     from ASCNCOAClean 
     where ASCNCOAClean.firstname = amdashboard.actorsfirst 
          and ascncoaclean.lastname = amdashboard.actorslast) 
where exists (select ascncoaclean.id 
     from ASCNCOAClean 
     where ASCNCOAClean.firstname = amdashboard.actorsfirst 
          and ascncoaclean.lastname = amdashboard.actorslast); 

然而,這回報和錯誤1242:子查詢返回多個1行。這似乎很愚蠢。我知道它會返回多行...我想要它,因爲我需要更新多行。

我錯過了什麼?

+0

你可以張貼一些示例數據或模式結構? – Rachcha

回答

6

你想會是這個樣子的查詢:

UPDATE amdashboard a, ASCNCOAClean b SET 
    a.ASCID   = b.id, 
    a.ASCFirst   = b.firstname, 
    a.ASCLast   = b.lastname, 
    a.ASCOtherName  = b.listingspousename, 
    ... 
    a.ASCMaritalStatus = b.MaritialStatus 
WHERE a.actorsfirst = b.firstname; 

觀察,你會與列協會沒寫其餘取代...

但是請注意,這個問題告訴我這個查詢將會對你的數據庫做一些非常錯誤的操作,因爲你沒有使用唯一鍵來關聯這些表。如果有兩個相同的記錄ASCNCOAClean.firstname您肯定會丟失數據。

還觀察它要更新現有的記錄amdashboard,而不是添加新的。如果你的意圖是從遷移到ASCNCOAClean數據amdashboard假設amdashboard是一個全新的,空表,那麼你要查詢的是:

INSERT INTO amdashboard (
    ASCID, ASCFirst, ASCLast, ASCOtherName, ASCAdd1, ASCAdd2, ASCCity, ASCState, 
    ASCZip, ASCZip4, ASCY2007, ASCY2008, ASCY2009, ASCY2010, ASCY2011, ASCY2012, 
    ASCEthnicity, ASCGender, ASCMaritalStatus 
) 
SELECT 
    id, firstname, lastname, listingspousename, add1, add2, city, state, 
    zip, zip4, y2007, y2008, y2009, y2010, y2011, y2012, Ethnicity, Gender, 
    MaritialStatus 
FROM ASCNCOAClean; 
+0

謝謝......我已經基本上解決了這個問題。 –

+0

這是我降落 –

+0

更新amdashboard內加入ASCNCOAClean \t \t \t上ASCNCOAClean.firstname = amdashboard.actorsfirst和ascncoaclean.lastname = amdashboard.actorslast 組/*amdashboard.ascid = ascncoaclean.id,*/ \t/* amdashboard.ascfirst = ascncoaclean.firstname,*/ \t amdashboard.asclast = ascncoaclean.lastname, \t amdashboard.ascothername = ascncoaclean.listingspousename, \t amdashboard.ascadd1 = ascncoaclean.add1, \t amdashboard.ascadd2 = ascncoaclean.add2, \t amdashboard.asccity = ascncoaclean.city, \t amdashboard.ascstate = ascncoaclean.state, \t amdashboard.asczip = ascncoaclean.zip ...; –

相關問題