2014-09-11 78 views
0

我試圖更新表amga中的一行,表amgb只有一行加入了它們的itemTempIdMySql將更新與內部連接相結合並限制

我的問題是,表amgb表可能有多達6行,我需要使用它從更新中只有一個。

我很熟悉使用連接進行更新,但是當我添加一個限制(以便只獲得一行)時,我收到錯誤消息Incorrect usage of update and limit。我讀到這是不可能的,但是會有另外一種方法來做到這一點嗎?

阿姆加

"id" "itemId" "itemTempId" "itemImageName" "itemName"     "itemCountry" "userId" 
"1"  "US1"  "T001"   \N    "Samsung Galaxy Note 5"  "US"   "1" 
"2"  "CA2"  "T002"   \N    "Samsung Galaxy Note 6"  "CA"   "2" 
"3"  "UK3"  "T003"   \N    "Samsung Galaxy Note 7"  "UK"   "3" 

amgb

"id" "itemId" "itemTempId" "itemImageName"  "userId" 
"1"  "US1"  "T001"   "front.jpg"   "1" 
"2"  "US1"  "T001"   "side-left.jpg"  "1" 
"3"  "US1"  "T001"   "side-right.jpg" "1" 
"4"  "US1"  "T001"   "back.jpg"   "1" 
"5"  "CA2"  "T002"   "front.jpg"   "2" 
"6"  "CA2"  "T002"   "side-left.jpg"  "2" 
"7"  "CA2"  "T002"   "side-right.jpg" "2" 
"8"  "CA2"  "T002"   "back.jpg"   "2" 
"9"  "UK3"  "T003"   "front.jpg"   "3" 

的Sql我用

update amga a inner join amgb b on a.itemTempId = b.itemTempId 
set a.itemImageName = b.itemImageName where a.itemTempId = 'T001' limit 1; 

EXPEC泰德結果:表阿姆加更新後

"id" "itemId" "itemTempId" "itemImageName" "itemName"     "itemCountry" "userId" 
    "1"  "US1"  "T001"  front.jpg  "Samsung Galaxy Note 5"  "US"   "1" 
    "2"  "CA2"  "T002"  \N    "Samsung Galaxy Note 6"  "CA"   "2" 
    "3"  "UK3"  "T003"  \N    "Samsung Galaxy Note 7"  "UK"   "3" 

注:itemTempIdfront.jpg更新,這是amgb

的第一行itemTempId = T001任何幫助表示讚賞。

更新 我注意到它的工作原理,如果我刪除的限制,它也會更新。但是這是否正確嗎? MySql對select中的其他行有什麼作用?

update amga a inner join amgb b on a.itemTempId = b.itemTempId 
set a.itemImageName = b.itemImageName where a.itemTempId = 'T001'; 
+1

加入時你是如何定義「第一排」?我想這不是一個隨機的行,它是最低ID的行嗎? (因爲表中沒有行的保證順序) – Josien 2014-09-11 06:11:59

+0

第一個/最高的一個。在這種情況下,它將是'1' – Norman 2014-09-11 06:12:46

+0

而對於'T002'(如果在更新中使用了「T002」)它將是'5' – Norman 2014-09-11 06:14:47

回答

1

也許你可以使用子查詢:

UPDATE amga a 
SET a.itemImageName = 
    (SELECT b.itemImageName 
    FROM amgb b 
    WHERE b.itemTempId = 'T001' 
    ORDER BY b.id LIMIT 1) 
WHERE a.itemTempId = 'T001' 
+0

在你的sql中,是否有可能使用select中的數據更新兩列:例如:SET.itemImageName,SET itemImagePath =(選擇b.itemImageName,b.itemImagePath等)' – Norman 2014-09-11 07:08:26

+0

Afaik,不幸的是不是。但是你可以用連接來嘗試下面的更新語句。因爲我不確定,所以我不會將它添加到答案中。你可以格式化並嘗試:UPDATE阿姆加一個 INNER JOIN (SELECT b.itemImageName, b.itemImagePath FROM amgb b WHERE b.itemTempId = 'T001' ORDER BY b.id LIMIT 1)C對C。 itemTempId = a.itemTempId SET a.itemImageName = c。itemImageName, a.itemImagePath = b.itemImagePath WHERE a.itemTempId ='T001';我檢查了這個答案:http://stackoverflow.com/questions/16473402/update-multiple-columns-from-subquery – yalpertem 2014-09-11 07:29:24

+0

我會嘗試。我使用你的第一個答案。感謝那。 – Norman 2014-09-11 07:37:39