2015-09-01 84 views
-1

我不是一个真正的SQL人,所以任何帮助,将不胜感激。我试图更新表时域匹配一列,不会在另一:更新表与多个连接

UPDATE dleads 
SET mag_name = magazines.mag_name 
FROM magazines 
WHERE dleads.umc = magazines.umc and 
dleads.mag_name <> magazines.mag_name 

我可以得到SELECT工作,但不是UPDATE

+1

一切看起来不错。你有什么错误吗?你是什​​么SELECT查询看起来像返回记录?您是否通过'dleads.mag_name'获得了多个记录? – JNevill

+0

您的查询应该可以正常工作。请详细说明“不工作”的真正含义。 –

+0

[你有你的答案吗?](http://meta.stackexchange.com/a/5235/169168) –

回答

0

您的查询在处理NULL值时不健壮。

你也可以使用这样的:

UPDATE dleads SET mag_name = magazines.mag_name从杂志WHERE dleads.umc = magazines.umc和接合(dleads.mag_name, '')<> COALESCE(magazines.mag_name, '');

0

您的查询看起来像它做的正是你的描述:

UPDATE dleads d 
SET mag_name = m.mag_name 
FROM magazines m 
WHERE d.umc = m.umc 
AND d.mag_name <> m.mag_name; 

最常见的事情被忽略这里将NULL值。如果mag_name可以在两个表是空的,你无论如何要更新,使用NULL安全IS DISTINCT FROM

UPDATE dleads d 
SET mag_name = m.mag_name 
FROM magazines m 
WHERE d.umc = m.umc 
AND d.mag_name IS DISTINCT FROM m.mag_name;

旁白:你提到“多连接”的称号,但我只看到一个加入您的查询。