2016-05-18 4 views
0

У меня есть две таблицы, как показано ниже:Обновление таблицы от союза выберите заявление

TABLEA

k | 1 | 2 
-------------------- 
a | mango | xx 
b | orange| xx 
c | xx | apple 
d | xx | banana 
a | xx | mango 

TableB

k | 1 | 2 
-------------------- 
a |  | 
b |  | 
c |  | 
d |  | 

Как я могу обновить tableb от tablea так Я получаю результаты ниже?

TableB

k | 1 | 2 
-------------------- 
a | mango | mango 
b | orange| xx 
c | xx | apple 
d | xx | banana 

в случае если я пытаюсь использовать оператор обновления, как показано ниже

update tableb 
set 1 = x.1, 
    2 = x.2 
from 
(
    select * from tablea 
) x 
where tablea.k = x.k 

Могу ли я сделать заявление обновление игнорировать xx если k будет дублировать?

Спасибо.

+0

, как определить, что ROW1 ('к = 'a'') будет' манго, mango' не 'хх, xx' или' манго, xx'? –

+0

@ PhamX.Bach Я прыгал «xx» означает «null»? Но да, нам нужна дополнительная информация. –

+0

@JuanCarlosOropeza, если 'xx' означает' null', тогда я спрошу, имеет ли 'tablea' другую строку' a | оранжевый | банана' то, что должно быть 'tableb'. 'Taz' ваш вопрос требует больше логики о данных в' tablea' и как обновить 'tableb' –

ответ

1

Вот ВЫБОР, надеюсь, что вы сможете сделать обновление.

  1. Попробуйте искать совпадения для каждого на левой стороне с именем <> «хх»
  2. Тогда союз с остальными строками я Havent использовать его еще.

SQL Fiddle Demo

SELECT t1."k", t1."1", COALESCE(t2."2", 'xx') "2" 
FROM tablea t1 
LEFT JOIN tablea t2 
     ON t1."1" = t2."2" 
WHERE t1."1" <> 'xx' 
UNION ALL 
SELECT t1."k", t1."1", t1."2" 
FROM tablea t1 
WHERE t1."1" = 'xx' 
    AND t1."2" NOT IN (SELECT t2."1" FROM tablea t2 WHERE t2."1" <> 'xx') 
Смежные вопросы