我一直在阅读SO和其他网站,并做了几个例子;但是,我的SQL语句仍未按要求执行。
我有两张桌子
parts
============================
pmkParts fnkManufacturer
----------------------------
0 Penn-Union
1 Schneider
2 Telemecanique
和
manufacturer
===============================
Manufacturer pmkManufacturer
-------------------------------
Penn-Union 45
Schneider 56
Telemecanique 12
我想将零件表更改为
parts
============================
pmkParts fnkManufacturer
----------------------------
0 45
1 56
2 12
这是我试过的SQL语句。
Update parts
SET parts.fnkManufacturer = (
SELECT manufacturer.pmkManufacturer
FROM manufacturer
WHERE manufacturer.pmkManufacturer = parts.fnkManufacturer
)
即更改正确的列,但它使用'NULLS'而不是外键(制造商)填充它。我认为那里应该有一个加入,但我不确定在哪里。
任何提示?
这是有效的SQL语句。感谢MarcB的帮助。
Update parts
SET parts.fnkManufacturer = (
SELECT manufacturer.pmkManufacturer
FROM manufacturer
WHERE manufacturer.Manufacturer= parts.fnkManufacturer
)
答案 0 :(得分:1)
尝试使用更新联接查询更改您的查询,如下所示。同样,你加入了错误的专栏,你实际应该加入manufacturer.Manufacturer
专栏。
Update parts p
JOIN manufacturer m ON m.Manufacturer = p.fnkManufacturer
SET p.fnkManufacturer = m.pmkManufacturer;
答案 1 :(得分:1)
您的pmkManufacturer
看起来像int
所以最好将新的int字段添加到parts
,更新它然后删除旧列。这样的事情。
alter table dbo.parts add pmkManufacturer int
update dbo.parts
set pmkManufacturer = m.pmkManufacturer
from dbo.parts p
inner join dbo.Manufacturer m on p.fnkManufacturer = m.manufacturer
答案 2 :(得分:0)
最好的解决方案,你可以使用INNER JOIN,例如:
update parts p
inner join manufacturer m on
p.pmkManufacturer = m.Manufacturer
set p.pmkManufacturer = m.pmkManufacturer
Howerver,在您的情况下,如果我错了,您想更新pmkManufacturer
,而pmkManufacturer
实际上是INNER JOIN的条件ON
所以我不确定它是什么'好的请求。如果没有,也不难,你可以添加一个新列:pmk_bis_manufacturer
并将值设置到此列中,然后删除旧列pmkManufacturer
并在必要时更改新列的名称。
给您一个提示:列数据库的名称,我更喜欢设置:
pmk_manufacturer
代替pmkManufacturer
,因为名称中有大写字母 可能会在未来中产生一个问题。例如:对于ORM Doctrine, 这不好:D