2009-07-24 66 views
0

我想在Oracle中創建更新語句。 這版本的SQL Server:從SQL Server中更新Oracle中的SQL轉換

UPDATE ev 
    SET 
    (ev.station_type = t.st_type, ev.adt = t.adt ) 
    FROM source ev 
    JOIN dataTbl t 
    ON ev.counterID = t.counterID 

有兩個表 源表是counterID是主鍵 dataTBL表是counterID的外鍵 我特林從dataTBL獲取數據的烴源表。

如果有人幫助創建Oracle版本的更新,我將不勝感激。 謝謝, 更環保

回答

2

你想用這種技術:

UPDATE (SELECT ev.station_type 
       , t.st_type 
       , ev.adt ev_adt 
       , t.adt t_adt 
      FROM source ev 
        JOIN dataTbl t 
        ON ev.counterID = t.counterID 
     ) 
    SET station_type = st_type 
     , ev_adt = t_adt 
    ; 

子查詢產生的結果集,此時您可以使用SET子句但是要更新列。

0

我相信下面的語法將工作(沒有甲骨文的手籤):

UPDATE ev 
SET (station_type, adt) = (
    SELECT (t.st_type, t.adt) 
    FROM dataTbl t 
    WHERE t.counterId = ev.counterId 
) 
WHERE ev.counterId IN (SELECT t.counterID FROM t); 

編輯:WHERE子句重複相貌醜陋,但@Steve指出,這是需要避免在dataTbl中插入沒有匹配項的行中的空值(當然,如果這在您的用例中是可能的)。如果您確實需要這樣的預防措施,@ Steve的基於聯接的解決方案可能更可取。

+0

如果source中存在dataTbl中沒有對應行的行,則您的解決方案將無法正常工作 - 您將以station_type和adt中的空值結束。 – 2009-07-24 19:39:56

+0

是的,我懷疑WHERE子句需要重複(儘管它看起來很愚蠢) - 讓我相應地編輯,tx。 – 2009-07-24 19:59:56