Sql查询更新table1的table2值

时间:2013-03-30 12:46:59

标签: sql

我有两个名为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

有人可以帮助我吗?

感谢。

2 个答案:

答案 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表真的是一个很奇怪的名表。我想要一个包含列名字,姓氏,地址等的工作表。