2014-09-27 3 views
1

Привет У меня есть 2 таблицы, как это:сравнить 2 колонки таблицы и обновить новый столбец

enter image description here

enter image description here

, например, в первой строке таблицы 2 значения Col является 3661 и его значение ' мед»из таблицы 1, я хочу, чтобы обновить класс из таблицы 1 с„МЕД“и ...

это код, я написал, но Somthing неправильно :( жаль я новичок

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

добавить условия соединения: от table1 левых внешнего соединения таблица2 ** ON table1.number = table2.number ** – Ormoz

+0

Вы пропустили 'END' для' CASE' – Ormoz

+0

я добавил джо~d в состоянии: ON table1.number = table2.number и END, но не работает –

ответ

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

спасибо, что это сработало! моя ошибка заключалась в том, что я положил «END» после «From» –

+0

@meysam jan, спасибо, Glad, я был полезен – Ormoz

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

im получение этой ошибки -> Несколько столбцов указаны в агрегированном выражении, содержащем внешнюю ссылку. Если агрегированное выражение содержит внешнюю ссылку, то эта внешняя ссылка должна быть единственным столбцом, на который ссылается выражение. –

+0

@meysammotamedi. , , Запрос в этом ответе содержит только один столбец в подзапросе. Он не может генерировать эту ошибку. –

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 
) 

EDIT: В случае 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 
Смежные вопросы