我刚刚接管了数据库,发现有很多区域存储的数据没有标准化。操作员姓名的记录不以标准化方式存储。我正在努力实现标准化,以便更容易分析数据。以下是我需要帮助的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" ;
我不熟悉更新查询。
答案 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可以验证。
如果需要调整/进一步详细说明,请发表评论。