2015-05-23 31 views
0

我希望你的一天比我的更好。我想今天早上我有一個簡單的任務,就是基於一個普通的列,在mysql(Distrib 5.5.43,用於debian-linux-gnu)中組合兩個表。基本上結構如下:MySQL列使用IF(#1054 - 'where子句'中的未知列')UPDATE數據替換

Practice1 
Hip Description Purchaser Price 
1  Bill Smith  Sam Dillon $300,000 
2  Justin Boyle Sarah Jones $75,000 
3  Kevin Bains Anne Helan $120,000 
4  Greg Demtri James Coon $250,000 

Practice2 
COL 1 COL 2  COL 3 
2  James King $80,000 
4  Bill Smell $300,000 

我想要做的是更新Practice1與Practice2的值。最終的結果是這樣的:

Practice1 
Hip Description Purchaser Price 
1  Bill Smith  Sam Dillon $300,000 
2  Justin Boyle James King $80,000 
3  Kevin Bains Anne Helan $120,000 
4  Greg Demtri Bill Smell $300,000 

我試過什麼(沒有工作)至今一直:

UPDATE Practice1 
SET Practice1.Purchaser=(SELECT `COL 2` FROM `Practice2` WHERE Practice1.Hip=`Practice2`.`COL 1`), 
    Practice1.Price=(SELECT `COL 3` FROM `Practice2` WHERE Practice1.Hip=`Practice2`.`COL 1`) 
ORDER BY Practice1.Hip 

什麼結束了發生的事情是我想要的是更新的信息,但是沒有想到的信息變成了NULL! IE-

Practice1 
Hip Description Purchaser Price 
1  Bill Smith  NULL   NULL 
2  Justin Boyle James King $80,000 
3  Kevin Bains NULL   NULL 
4  Greg Demtri Bill Smell $300,000 

所以,我想一個 「IF」 語句的類型:

UPDATE Practice1 
SET Practice1.Purchaser = if(Practice1.Purchaser=Practice2.`COL 2`, Practice1.Purchaser, Practice2.`COL 2`), 
    Practice1.Price = if(Practice1.Price=Practice2.`COL 3`, Practice1.Price, Practice2.`COL 3`) 
WHERE Practice1.Hip=Practice2.`COL 1` 
ORDER BY Practice1.Hip 

它給我的錯誤 「1054 - 未知列 'Practice2.COL 1' 在 'where子句'」 我認爲我錯過了一些基本的東西(我希望)。

回答

0

嘗試:

UPDATE practice1 p1, practice2 p2 
    SET p1.`Price` = p2.`COL3`, p1.`Purchaser` = p2.`COL2` 
    WHERE p1.`Hip` = p2.`COL1` 
    ; 

演示:http://sqlfiddle.com/#!9/b3a26/1

+0

感謝您的快速修復。沒有多餘和重點。另外,感謝您的鏈接。我不知道我可以模擬SQL代碼的網站。 –

相關問題