2015-04-14 4 views
0

У меня есть таблица со следующими колонныеКак сравнить две разные строки таблицы в Mysql

ID TAG VALUE

Значение в таблице что-то вроде этого

1 ac.id  12345 
1 ac.title xyz 
2 ac.id  12345 
2. ac.title Yo its the title 

В этом случае я хочу сравнить значение двух разных идентификаторов, имеющих один и тот же тег, и если значение отличается от другого, обновите идентификатор, который меньше

, например

значение ac.title отличается для идентификатора 2 и 1, так что я буду обновлять значение 1 с 2.

Заранее спасибо

ответ

0

Ответ по-прежнему использовать присоединиться, но его что-то вроде этого:

update test t1 
    left join test t2 
    on t1.id < t2.id 
     and t1.name = t2.name 
    set t1.value = t2.value 
    where t2.id is not null; 

Here's a fiddle

Вам может понадобиться запустить его несколько раз, если у вас есть несколько строк с те же теги, но разные идентификаторы. Если это серьезная проблема, просто комментируйте, и я придумаю другой запрос - это просто быстрое и простое решение.

редактировать

А вот чуть более сложный, но более эффективным решением. Это обновит ВСЕ теги с более низким идентификатором до значения тега с MAX ID.

update test t1 
    inner join 
    (
    select q1.*, t2.value from 
    (
     select max(id) id, name 
     from test 
     group by name 
    ) q1 
    inner join test t2 
     on q1.id = t2.id 
     and q1.name = t2.name 
) m 
    on t1.name = m.name 
    and t1.id < m.id 
    set t1.value = m.value 

alternate fiddle

1

http://sqlfiddle.com/#!9/40f442/1

UPDATE table1 
INNER JOIN (
    SELECT * 
    FROM table1) t 
    ON t.tag=table1.tag 
    AND t.val != table1.val 
    AND t.id > table1.id 
SET table1.val = t.val 
+0

вы знаете, вы можете просто внутреннее соединение таблицы снова и псевдоним это правильно? нет необходимости «выбирать * из таблицы1» в подзапросе там вообще? –

Смежные вопросы