2011-04-14 76 views
1

我有两个表。第一个人拥有empid和managerid,而第二个表具有empid和其他专栏。但是table2没有任何元组。我如何更新table2,以便对于特定的管理员,如果empid不存在,则将其添加到table2中,否则将更新table2的其他字段。更新SQL连接

总之,如何使用连接表来更新没有任何行的表。

我使用这个命令

UPDATE EMPLOYEE_GOAL_TABLE 
SET ISGoal1='yes' 
FROM EMPLOYEE_TABLE 
LEFT OUTER JOIN EMPLOYEE_GOAL_TABLE 
ON EMPLOYEE_TABLE.EmployeeID = EMPLOYEE_GOAL_TABLE.EmployeeID 
WHERE EMPLOYEE_GOAL_TABLE.EmployeeID IS null. 

,但是这说明影响任何行。

+0

怎么样(简体)DDL所以我们可以重新创建数据库的相关部分? – CJM 2011-04-14 08:24:10

+0

可以请详细说明。?我的命令不显示错误。只是它可以更新任何东西。也许因为它已经在table2中有任何行。 – scooby 2011-04-14 08:27:24

回答

0

如果你想在EMPLOYEE_GOAL_TABLE添加缺少的记录,其中在EMPLOYEE_TABLE存在记录,那么你需要做一个INSERT,而不是UPDATEEMPLOYEE_GOAL_TABLE。如果它不存在,则无法更新EMPLOYEE_GOAL_TABLE中的记录。 (我希望我正确理解您的要求。:))

所以,如果我们的目标是添加缺少的记录,然后做这样的事情...

INSERT INTO EMPLOYEE_GOAL_TABLE (EmployeeID, ISGoal1) 
SELECT EMPLOYEE_TABLE.EmployeeID, 'yes' 
FROM EMPLOYEE_TABLE 
WHERE EMPLOYEE_TABLE.EmployeeID NOT IN 
(
    SELECT DISTINCT EMPLOYEE_GOAL_TABLE.EmployeeID 
    FROM EMPLOYEE_GOAL_TABLE 
) 
+0

非常感谢,它有点解决了我的问题.. – scooby 2011-04-14 10:15:22

0

是您的基本查询返回任何记录?

你怎么得到,当你

SELECT * 
FROM EMPLOYEE_TABLE 
LEFT OUTER JOIN EMPLOYEE_GOAL_TABLE 
ON EMPLOYEE_TABLE.EmployeeID = EMPLOYEE_GOAL_TABLE.EmployeeID 
WHERE EMPLOYEE_GOAL_TABLE.EmployeeID IS null 

+0

是的,它返回table1中不存在行= no行的两个表的连接。 – scooby 2011-04-14 08:31:43

+0

好的,你正在尝试更新不返回行的表!根据定义,这绝不应该起作用。更新table2,表2中没有行 – Nick 2011-04-14 08:33:36