从没有类似值的另一个表更新表

时间:2015-07-03 17:04:02

标签: sql ms-access ms-access-2007

我刚刚接管了数据库,发现有很多区域存储的数据没有标准化。操作员姓名的记录不以标准化方式存储。我正在努力实现标准化,以便更容易分析数据。以下是我需要帮助的3个表。我需要更新名为TimeCards的表格上的信息。

tblEmployees

ID   FirstName LastName    Num
234  Saijimon  Joseph306   306
235  Pasquale  Partipilo   299

这个表的主要问题是姓氏内部有数字,如ID 234所示,但其他一些完全正常,如ID 235所示。我在下面做了一个新表来纠正这些变化。

tblEmployeeMain

 ID   FirstName LastName    Num
 234  Saijimon  Joseph      306
 235  Pasquale  Partipilo   299

现在主要问题。我有一张桌子,从表格中获取信息。表单使用来自tblEmployees的信息

tblTimeCards

TimeCard#    Employee         Hours
27742        Joseph306        35
27743        Partipilo        36

有没有办法更新tblTimecards中的所有现有条目,以便存储的信息如下所示?

TimeCard#    Employee                   Hours
27742        Joseph Saijimon 306        35
27743        Partipilo Pasquade 299     36

以下是我尝试使用的查询,但由于没有连接,我不知道该做什么。

UPDATE  tblTimeCards
SET tblTimeCards.Employee = tblEmployeeMain.[Last Name]+" "+tblEmployeeMain.[First Name]+" "+tblEmployeeMain.[no]
WHERE tblTimeCards.Employee = "Joseph%" AND tblEmployeeMain.[Last Name] = "Joseph" ;

我不熟悉更新查询。

3 个答案:

答案 0 :(得分:1)

您可以在 TimeCard 表中添加名为 ID_Employee 的列。此列扮演外键的角色,可用于在表 tblEmployees TimeCard 之间创建关系。

CREATE TABLE TimeCard
(
    Timecard INT PRIMARY KEY,
    Employee VARCHAR(50),
    Hours INT,
    ID_Employee INT
)

然后使用以下代码更新TimeCard表中的特定数据

UPDATE TimeCard
SET Employee = tblEmployees.LastName + ' ' + tblEmployees.FirstName + ' ' + CAST(tblEmployees.Num AS VARCHAR)
FROM tblEmployees INNER JOIN TimeCard
ON tblEmployees.ID = TimeCard.ID_Employee

在您提供的实际表格形式中,您无法在表格 tblEmployees TimeCard 之间绑定数据。

答案 1 :(得分:0)

您正尝试使用tblemployemain更新tbltimecard,在这种情况下,您应该使用带连接的更新

 UPDATE  tblTimeCards 
SET tblTimeCards.Employee = tblEmployeeMain.[Last Name]+" "+tblEmployeeMain.[First Name]+" "+tblEmployeeMain.[no] 
from (select timcard#,First name, Last name, no from tblemployeemain)
WHERE tblTimeCards.timecard# = tblEmployeeMain.timcard#;

答案 2 :(得分:0)

以下适用于MS SQL Server 2008。

UPDATE tblTimeCards
SET employee = (SELECT CONCAT(lastName, ' ', firstName, ' ', id)
                FROM tblEmployeeMain
                WHERE tblTimeCards.employee =
                      CONCAT(tblEmployeeMain.lastName, tblEmployeeMain.num)
               )
WHERE employee LIKE '%[0-9]'
  AND CHARINDEX(' ', employee) = 0
;

UPDATE tblTimeCards
SET employee = (SELECT CONCAT(lastName, ' ', firstName, ' ', id)
                FROM tblEmployeeMain
                WHERE tblTimeCards.employee = tblEmployeeMain.lastName
               )
WHERE employee NOT LIKE '%[0-9]'
;

查看实际操作:SQL Fiddle 对不起,没有MS Access可以验证。

如果需要调整/进一步详细说明,请发表评论。