2014-07-07 72 views
0

我已經創建了table1,我可以通過表單更新,所以如果我需要更改價格百分比,我可以不需要編輯代碼。 我從csv文件導入並創建臨時表2。新的臨時表2具有項目的成本,所以我需要乘以一個百分比來獲得銷售價格,因此需要在表格1中獲得價格百分比。在另一個表中乘一列一列

percent是table1中的列,我想按行ID選擇它,importID是列ID,這兩個都在table1中,我可以通過表單進行更新。我需要根據行ID選擇未來的增長率和多個百分比。

我想乘以永久表1中的百分比列的臨時表2中的價格列。

這是給我一個語法錯誤

SELECT percent FROM my_table1 WHERE importID = 1 

這裏的部分定價更新代碼

UPDATE my_temp_table2 
    SELECT percent FROM my_table1 WHERE importID = 1 
    SET Price = (Price * percent); 

回答

1

這應該是

UPDATE my_temp_table2 
SET Price = Price * (SELECT percent FROM my_table1 WHERE importID = 1); 

這是使用一個變量的替換乘以所有價格my_temp_table2與my_table1發現importID 1.

這裏的一個價格:

SELECT @percent := percent 
FROM my_table1 WHERE importID = 1; 

UPDATE my_temp_table2 
SET Price = Price * @percent; 
+0

我很感謝大家的幫助 – user3814045

1

看來你是想「把它插入一個變量」,這並不完全如何運行SQL。

怎麼是這樣的:

UPDATE my_temp_table2 
SET Price = Price * (SELECT percent FROM my_table1 WHERE importID = 1); 

這不是超高性能,但對於一次性更新它應該工作的罰款。

+0

@MarcusAdams - 儘管我很欣賞你的熱情,但你所做的編輯完全是風格,對錶現或結果沒有影響。我並不真正關心這樣的事情,但是如果你選擇像這樣的文體變化來「修復」他們的代碼,你會讓很多編碼者不高興。 – PlantTheIdea

0

您想要更新my_temp_table2的所有行中的Price列?通過從my_table1返回的單行中的percent列的值?

下面是實現這一目標的一種方法:

UPDATE my_temp_table2 t 
CROSS 
    JOIN (SELECT p.percent 
      FROM my_table1 p 
      WHERE p.importID = 1 
      ORDER BY p.percent 
      LIMIT 1 
     ) q 
    SET t.Price = t.Price * q.percent 

如果您的問題表示importIDmy_table1PRIMARY KEY(或UNIQUE KEY),你能避免內嵌視圖。內聯視圖查詢中LIMIT和ORDER BY子句的用途是確保返回不超過1行,並使結果具有確定性。 (還有其他的方法來做到這一點,例如MIN()MAX()合計)

如果importIDmy_table1獨一無二的,你可以簡化上面的查詢,只是引用該表,而不使用內嵌視圖:

UPDATE my_temp_table2 t 
    JOIN my_table1 q 
    ON q.importID = 1 
    SET t.Price = t.Price * q.percent 

在運行UPDATE之前,首先將它作爲SELECT語句編寫通常是有益的。只需將UPDATE關鍵字替換爲SELECT ... FROM,並刪除SET子句。例如:

SELECT t.Price    AS `old_price` 
    , q.percent   AS `percent` 
    , t.Price * q.percent AS `new_price` 
    FROM my_temp_table2 t 
    JOIN my_table1 q 
    ON q.importID = 1 

變化,通過與UPDATE關鍵字替換SELECT ... FROM,並添加一個SET子句回的UPDATE(用以指定一個返回NEW_PRICE表達式的結果,Price列。需要注意的是,如果沒有匹配行在my_table1發現,查詢/更新將返回/更新行數爲零。

如果不使用JOIN操作,而改爲使用子查詢SET子句中,一個NULL值由subque返回ry將導致分配給Price列的NULL值。