我有两个名为Workers and Stats的表
在Workers表中,一个大的名字和姓氏列表放在一个列中(愚蠢地)在类似于此的结构中:
NameID, Name
1, John
2, Smith
3, McDonald
4, Harry
在统计表中是工人的所有统计数据,如下所示:
id, firstnameid, secondnameid, wage, sold
1, 4, 3, 1000, 10
2, 1, 2, 2000, 20
因为这太不方便了,我试图编写一个查询或者将Stats表名称更改为实际名称的东西,如:
UPDATE `Stats` SET `Stats.firstnameid` = `Workers.Names`
WHERE `Stats.firstnameid` = `Workers.NameID`
然后对secondnameid
执行相同操作因此,如果这样做的结果是Stats表将被更改为这样(使用我上面显示的示例表):
id, firstnameid, secondnameid, wage, sold
1, Harry, McDonald, 1000, 10
2, John, Smith, 2000, 20
有人可以帮助我吗?
感谢。
答案 0 :(得分:1)
不要这样做!
改为创建视图:
create view v_stats as
select s.id, fname.name as firstname, lname.name as lastname, s.wage, s.sold
from stats s left outer join
workers fname
on s.firstnameid = fname.nameid left outer join
workers lname
on s.lastnameid = lname.nameid;
我不知道为什么有人会设计数据库,将这些名称分开。好吧,这似乎是糟糕的数据库设计或其他什么。通过复制名称来复合问题,你不会做得更好。据推测,该表以某种方式得以维持。
如果两名员工的名字相同,那么他们在工人表中是否有一行或两行?
答案 1 :(得分:1)
首先,您需要更改表结构。至于移动数据,如下所示。
UPDATE
Stats
SET
s.firstName = w1.name,
s.secondName= w2.name
FROM Stats AS s
INNER JOIN Workers AS w1 ON s.firstnameid = w1.NameID
INNER JOIN Workers AS w2 ON s.secondnameid= w2.NameID
我喜欢worker表的想法,但是你的worker表真的是一个很奇怪的名表。我想要一个包含列名字,姓氏,地址等的工作表。