2015-03-02 46 views
0

我想更新大約800行,並想更新table_c它從table_A和table_b匹配兩個值。 table_a和table_c通過value_id關聯。從表中更新值如果從其他兩個表值匹配

例子:

CREATE TABLE TABLE_A (VALUE_ID INTEGER, PERSON_ID INTEGER, LAST_NAME VARCHAR2(15), FIRST_NAME VARCHAR2(15)); 
CREATE TABLE TABLE_B (VALUE_ID INTEGER, LAST_NAME VARCHAR2(15), FIRST_NAME VARCHAR2(15), ALIAS_ID INTEGER); 
CREATE TABLE TABLE_C (VALUE_ID INTEGER, ALIAS_ID INTEGER, PERSON_ID INTEGER); 
----- 
INSERT INTO TABLE_A (VALUE_ID, PERSON_ID, LAST_NAME, FIRST_NAME) 
VALUES (1, 6069, 'SMITH', 'JOHN'); 
INSERT INTO TABLE_A (VALUE_ID, PERSON_ID, LAST_NAME, FIRST_NAME) 
VALUES (2, 6111, 'ADAMS', 'JOHN'); 
INSERT INTO TABLE_A (VALUE_ID, PERSON_ID, LAST_NAME, FIRST_NAME) 
VALUES (3, 6117, 'ADAMS', 'SAM'); 
---- 
INSERT INTO TABLE_B (VALUE_ID, LAST_NAME, FIRST_NAME, ALIAS_ID) 
VALUES (4, 'SMITH', 'JOHN', 40856); 
INSERT INTO TABLE_B (VALUE_ID, LAST_NAME, FIRST_NAME, ALIAS_ID) 
VALUES (5, 'ADAMS', 'JOHN', 3425); 
INSERT INTO TABLE_B (VALUE_ID, LAST_NAME, FIRST_NAME, ALIAS_ID) 
VALUES (6, 'ADAMS', 'SAM', 40831); 
----- 
INSERT INTO TABLE_C (VALUE_ID, ALIAS_ID, PERSON_ID) 
VALUES (7, 28, 6069); 
INSERT INTO TABLE_C (VALUE_ID, ALIAS_ID, PERSON_ID) 
VALUES (8, 1022, 6111); 
INSERT INTO TABLE_C (VALUE_ID, ALIAS_ID, PERSON_ID) 
VALUES (9, 40473, 6117)

我一直在使用一個更新語句來完成這個和/或UPDATE語句嘗試,但它不工作。不知道我是否需要IF/ELSE語句。

最後,表B和表C中的alias_id必須相同。所以,這就是爲什麼table_C會被更新的原因。

這是我迄今爲止


UPDATE TABLE_C 
SET C.ALIAS_ID = (SELECT B.ALIAS_ID 
       FROM TABLE_B B 
       JOIN TABLE_A A 
       ON A.FIRST_NAME = B.FIRST_NAME AND A.LAST_NAME = B.LAST_NAME); 
+0

您已將此標籤標記爲SQL Server和Oracle SQL Developer。您真的使用Oracle SQL Developer連接到Microsoft SQL Server數據庫嗎?所以你正在尋找SQL Server語法而不是相關更新的Oracle語法? – 2015-03-02 22:18:54

+0

我正在使用oracle-sql開發人員,並且它已連接到Microsoft SQL Server數據庫。 – bbetos 2015-03-02 22:20:46

+0

如果'TABLE_B'和'TABLE_A'之間存在匹配,那麼'TABLE_C'的哪個特定記錄應該被更新? – 2015-03-02 22:33:59

回答

0

您可以使用使用UPDATE ... FROM SQL Server語法以下查詢:

UPDATE TABLE_C 
SET ALIAS_ID = b.ALIAS_ID 
FROM TABLE_C AS c 
INNER JOIN TABLE_A AS a ON c.PERSON_ID = a.PERSON_ID 
INNER JOIN TABLE_B AS b ON a.FIRST_NAME = b.FIRST_NAME 
          AND a.LAST_NAME = b.LAST_NAME 

這可能在Oracle中爲你工作:

MERGE 
INTO TABLE_C 
USING (
    SELECT c.PERSON_ID AS pid, b.ALIAS_ID AS bAlias 
    FROM TABLE_C AS c 
    JOIN TABLE_A AS a ON c.PERSON_ID = a.PERSON_ID 
    JOIN TABLE_B AS b ON a.FIRST_NAME = b.FIRST_NAME 
         AND a.LAST_NAME = b.LAST_NAME  
) 
ON (PERSON_ID = pid) 
WHEN MATCHED THEN 
UPDATE 
SET ALIAS_ID = bAlias; 
+0

它確實有道理。我不熟悉內部連接,但我正在研究這一點。感謝您的幫助,我會嘗試查詢。 – bbetos 2015-03-02 23:09:28

+0

它檢索到sql命令未正確結束。我加了「;」最後。 – bbetos 2015-03-03 16:53:04

+0

@bbetos它取決於使用sql命令的上下文:如果作爲單獨的命令或從SSMS內部使用,則不需要分號分隔符。 – 2015-03-03 19:44:34

相關問題