2011-01-08 203 views
1

我願意做這樣的事情:MYSQL:子查詢到在主查詢更新的表

  1. 在table標籤找到名稱=「someName」一行,remeber它的id
  2. 在同一個表查找另一行someCondition並設置在這一行col refference =上面的ID

試圖使用子查詢來做到這一點,但mysql拒絕說我不能子查詢我正在更新的表在主查詢中。

我該如何實現上述想法?

謝謝

回答

0

你可以做到這一點

update TAGS set 
    reference = 
     (select my_id from 
      (select id as my_id from TAGS where name='someName') 
     as SUB_TAGS) 
    where someCondition; 

不建議雖然。


編輯#1就能避免子查詢乾脆 - 作爲taspeotis rightly mentioned,通過join與荷蘭國際集團的標準相同的表。代碼如下:

UPDATE 
    TAGS t1, TAGS t2 
    SET 
    t1.reference = t2.id 
    WHERE 
     t2.name = 'someName' 
    AND 
     t1.someField = someCondition; 

這是一個更好的方法。

+0

我猜雙層嵌套解決mysql報告我的問題嗎?爲什麼不可取? – shealtiel 2011-01-08 22:33:10

1

Convert your subquery to a join然後UPDATE

您也可以執行更新操作涉及多個表。但是,您不能將ORDER BY或LIMIT用於多表UPDATE。 table_references子句列出了連接中涉及的表。其語法在第12.2.8.1節「JOIN語法」中描述。下面是一個例子:

UPDATE items,month SET items.price=month.price 
WHERE items.id=month.id; 
The preceding example shows an inner join that uses the comma operator, but multiple-table 

UPDATE語句可以使用任何類型的在SELECT語句,如LEFT JOIN聯接允許的。