C#project update MySQL从两个表中选择的行列表

C#project update MySQL从两个表中选择的行列表,c#,.net,mysql,C#,.net,Mysql,我有一个更新Magento商店priselist的项目。我有一个要更新的项目列表,我想用一个MySQL查询来更新它(我认为这样更有效)。priselist包括sku和价格 我有这两张桌子。从表1中,我使用sku在表2中更新值,当*实体id*在两个表中相等且属性id为“64”时,该值为物品的价格 表1 product_entity entity_id | sku 1 | p1 2 | p2 3 | p3 表2 prod

我有一个更新Magento商店priselist的项目。我有一个要更新的项目列表,我想用一个MySQL查询来更新它(我认为这样更有效)。priselist包括sku和价格

我有这两张桌子。从表1中,我使用sku表2中更新,当*实体id*在两个表中相等且属性id为“64”时,该值为物品的价格

表1

product_entity

entity_id  |  sku
        1  |   p1   
        2  |   p2
        3  |   p3
表2

product_entity_decimal

entity_id  |  attribute_id  |  value   |
        1  |            64  |      5   |
        1  |            65  |   NULL   |
        1  |            66  |   NULL   |
        2  |            64  |      7   |
        2  |            65  |   NULL   |
        2  |            66  |   NULL   |
        3  |            64  |      1   |
        3  |            65  |   NULL   |
        3  |            66  |   NULL   |
那么,我如何更新一个查询p1 prise为6,p3 prise为2

我尝试了这个查询,但没有成功

UPDATE product_entity, product_entity_decimal SET product_entity_decimal.value =
CASE 
    WHEN product_entity.entity_id = product_entity_decimal.entity_id AND product_entity_decimal.attribute_id =  '64' AND product_entity.sku =  'p1' THEN '6'
    WHEN product_entity.entity_id = product_entity_decimal.entity_id AND product_entity_decimal.attribute_id =  '64' AND product_entity.sku =  'p1' THEN '2'
    ELSE value
END

对于我的项目,我使用C#with.Net和MySQL 5.x,使用MySQL.Data.MySqlClient。如果MySQL数据库中有3000个项目的列表,也许有更好的方法来更新它,请共享它。:)

您可以在
更新
中使用
加入

UPDATE product_entity_decimal a
JOIN   product_entity b ON a.entity_id = b.entity_id AND b.sku IN ('p1', 'p3')
SET    a.value = CASE b.sku WHEN 'p1' THEN 6 WHEN 'p2' THEN 2 END
WHERE  a.attribute_id = 64

如果您有一个包含3000个要更新的项目的列表,那么最好的方法可能是迭代一个数组,然后每次迭代执行一个
update
。这些更新将封装在事务中,如以下伪代码:

// START TRANSACTION

// For Each Value in array
    // Execute UPDATE statement

// COMMIT

谢谢,这很有用,但我有个问题。执行多个SQL查询不需要比我尝试的查询更多的服务器端资源吗?我的项目的目的是让主办方更轻松。基于“记忆=1/计算”,我得到了另一个想法;这意味着在导出数据时,我将保留实体id,然后在一个表中进行简单的更新,但还是一个查询或多个查询,我仍然认为一个查询比多个查询好。