2013-11-27 263 views
1

在下面的表格2列mysql的更新,我需要更新列brake_pad,如下:在where子句中的子查询

Table ct_maint(simplified). 
Primary key is the combined model_id/fuel columns. 

model_id fuel brake_pad 
    1  gas   0 
    1  diesel  0 
    2  gas   0 
    3  diesel  0 
    4  gas   0 
    4  diesel  0 
    5  diesel  0 
    6  gas   0 
    6  diesel  0 
    ...... 

这brake_pad更新,告诉我的查询是:

SELECT models.model_id, motors.fuel FROM models 
INNER JOIN versions USING(model_id) 
INNER JOIN versiontrim USING(version_id) 
INNER JOIN motors USING(motor_id) 
WHERE trim_id IN(502, 506) 
GROUP BY model_id, fuel 

该查询给设置像一个结果:

model_id  fuel 
    1   diesel 
    3   diesel 
    4   gas 
    4   diesel 
    6   gas 

所以,我会喜欢,

UPDATE ct_maint SET brake_pad=1000 WHERE model_id AND fuel IN(SELECT.....) 

但在mysql嗡嗡声之前停了很久。

任何帮助表示赞赏。

回答

2

尝试此查询:

UPDATE ct_maint SET brake_pad=1000 WHERE (model_id, fuel) IN (SELECT.....) 
+0

T hank,那工作。我不知道可以使用这样的WHERE子句。生活与学习。 – BernardA

+0

同样在这里,我昨天才知道堆栈溢出:) –

2

有两种方法,你可以选择使用:

1)我认为你可以使用元组IN:

UPDATE ct_maint SET brake_pad=1000 
WHERE (model_id, fuel) IN 
    (SELECT models.model_id, motors.fuel FROM models WHERE ...); 

2)你可以在更新中使用连接

UPDATE ct_maint SET brake_pad=1000 
INNER JOIN (SELECT ...) models_upd 
ON ct_maint.model_id = models_upd.model_id 
AND ct_maint.fuel = models_upd.fuel; 
+0

谢谢,斯蒂芬。这工作。我首先标记了阿齐兹作为答案。 – BernardA