2014-09-27 58 views
1

您好我有2個表是這樣的:比較2倍表中的列和更新新的列

enter image description here

enter image description here

例如在第一行從表2欄值是3661和它等於' MED」從表1中,我想從表1中更新類‘MED’和...

這是我寫的代碼,但財產以後是錯誤的:( 對不起,我新手

UPDATE table1 SET 
class = (CASE 
      WHEN table2.col = table1.med 
      THEN 'MED' 
      -------------------------------- 
      WHEN table2.col = table1.mgl 
      THEN 'MGL' 
      -------------------------------- 
      WHEN table2.col = table1.rhp 
      THEN 'RHP' 
      -------------------------------- 
      WHEN table2.col = table1.epd 
      THEN 'EPD' 
      -------------------------------- 
      WHEN table2.col = table1.jpa 
      THEN 'JPA' 
      -------------------------------- 
      ELSE 'NULL' 
      FROM 
      table1 LEFT outer JOIN table2 
      ) 
+0

添加加盟條件:從表1左外連接表2 ** ON table1.number = table2.number ** – Ormoz 2014-09-27 16:07:35

+0

你錯過了'CASE' – Ormoz 2014-09-27 16:10:43

+0

我加祚的'END'在條件:ON table1.number = table2.number和結束,但沒有工作 – 2014-09-27 16:23:47

回答

1

我編輯了你的代碼。你沒有提到你使用哪個數據庫, 反正試試這個:

UPDATE table1 
    SET class = (CASE 
       WHEN table2.col = table1.med 
       THEN 'MED' 
       -------------------------------- 
       WHEN table2.col = table1.mgl 
       THEN 'MGL' 
       -------------------------------- 
       WHEN table2.col = table1.rhp 
       THEN 'RHP' 
       -------------------------------- 
       WHEN table2.col = table1.epd 
       THEN 'EPD' 
       -------------------------------- 
       WHEN table2.col = table1.jpa 
       THEN 'JPA' 
       -------------------------------- 
       ELSE 'NULL' 
    END) 
    from table1 left join table2 on table1.number=table2.number 
+0

感謝它的工作!我的錯誤是,我'後'從' – 2014-09-27 16:46:59

+0

@meysam 1月',謝謝你,很高興我是有幫助的 – Ormoz 2014-09-27 17:08:17

1

你想是這樣的:

UPDATE table1 
    SET class = COALESCE((SELECT MIN(CASE WHEN table2.col = table1.med THEN 'MED' 
              WHEN table2.col = table1.mgl THEN 'MGL' 
              . . . 
            END) as newval 
          FROM table2 
         ), 'NULL') 

這是一個有點棘手。如果有多個匹配項,你需要決定你想要哪一行。以上選擇匹配中的任意值。

coalesce()是處理沒有匹配的情況。在這種情況下子查詢將返回NULL

這是標準的SQL,應該適用於任何數據庫。特定的數據庫可能有其他編寫此查詢的方法。

+0

即時獲取此錯誤 - >多個列在包含外部引用的聚合表達式中指定。如果要彙總的表達式包含外部引用,那麼該外部引用必須是表達式中引用的唯一列。 – 2014-09-27 16:21:54

+0

@meysammotamedi。 。 。此答案中的查詢在子查詢中只有一列。它不能產生那個錯誤。 – 2014-09-27 16:41:13

0

試圖在MySQL中,這是工作

UPDATE Table1 
INNER JOIN Table1 T1 
LEFT JOIN Table2 T2 
ON T1.number = T2.number 
set T1.class = 
(CASE 
    WHEN T2.col = T1.med 
    THEN 'MED' 
    WHEN T2.col = T1.mgl 
    THEN 'MGL' 
    WHEN T2.col = T1.rhp 
    THEN 'RHP' 
    WHEN T2.col = T1.epd 
    THEN 'EPD' 
    WHEN T2.col = T1.jpa 
    THEN 'JPA' 
    ELSE 'NULL' 
    END 
) 

編輯: 在MS SQL SERVER的情況下,你可以使用這個

UPDATE Table1 
set class = 
(CASE 
    WHEN T2.col = T1.med 
    THEN 'MED' 
    WHEN T2.col = T1.mgl 
    THEN 'MGL' 
    WHEN T2.col = T1.rhp 
    THEN 'RHP' 
    WHEN T2.col = T1.epd 
    THEN 'EPD' 
    WHEN T2.col = T1.jpa 
    THEN 'JPA' 
    ELSE 'NULL' 
    END 
) 
FROM Table1 T1 
LEFT JOIN Table2 T2 
ON T1.number = T2.number