2011-04-14 75 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