2012-08-08 61 views
0

我想在MySql中使用單個查詢來更新多個列,但某些條件對所有列都有效。使用mysql中的單個查詢更新所有表中的值

我有大約25個數據庫,其中有相同的表結構。我需要使用一個查詢,使用phpMyAdmin更新所有數據庫中名爲Status的字段的特定網址。

現在我正在使用此查詢。 (我需要設置status=2table1在所有這些數據庫在url'www.google.com'的)

UPDATE `database1`.`table1` as p1, 
    `database2`.`table1` as p2 , 
    `database3`.`table1` as p3 
SET p1.`STATUS` = 2, 
    p2.`STATUS`= 2, 
    p3.`STATUS`= 2 
WHERE p1.url='www.google.com' and 
    p1.url=p2.url=p3.url 

但它不僅url='www.google.com'所有行更新數據。它也在'www.yahoo.com'中更新status=2

請幫我解決這個問題。

回答

4

這是你想要什麼:

UPDATE 
    database1.table1 AS p1 
    LEFT JOIN database2.table1 AS p2 USING (url) 
    LEFT JOIN database3.table1 AS p3 USING (url) 
SET 
    p1.`STATUS` = 2, 
    p2.`STATUS` = 2, 
    p3.`STATUS` = 2 
WHERE 
    url = 'www.google.com'; 

和你沒有工作becouse的p1.url=p2.url=p3.url
這就是評爲p1.url=(p2.url=p3.url) 其中(p2.url=p3.url) => FALSE所有不匹配, 然後我們結束於p1.url=FALSE

比較p1.url=FALSE =>將字符串與布爾值進行比較, 將字符串轉換爲整數給非爲非數字的0 IC串, 和布爾FALSE轉換爲整數,也給出了0,所以p1.url=FALSE

所以p1.url=p2.url=p3.url相同NOT p2.url=p3.url

所以你的代碼更新,其中存在p2.url所有行,那不是等於所有P3 .urls

+0

感謝您的快速回復。我正在測試它。 – 2012-08-08 12:04:26

+0

它工作,並感謝您解釋我的錯誤 – 2012-08-08 12:11:16

+0

刪除行,我應該做以下刪除 從database1.table1 AS p1 LEFT JOIN database2.table1 AS p2 USING(url) LEFT JOIN database3.table1 AS p3 USING(url ) WHERE url ='www.google.com'; – 2012-08-08 12:11:51

相關問題