Mysql Update Self Join, значение столбца увеличения на основе группы

Это наилучшее решение , которое я нашел до сих пор.

Предположим, что у нас есть пакет с именем org.mypackage, содержащий классы:

  • HelloWorld (основной класс)
  • SupportClass
  • UtilClass

и файлы, определяющие этот пакет, хранятся физически в каталоге D:\myprogram (в Windows ) или /home/user/myprogram (в Linux).

Структура файла будет выглядеть так:

Когда мы вызываем Java, мы указываем имя приложение для запуска: org.mypackage.HelloWorld. Однако мы также должны сказать Java, где искать файлы и каталоги, определяющие наш пакет. Поэтому, чтобы запустить программу, мы должны использовать следующую команду:

0
задан jarlh 5 March 2019 в 07:34
поделиться

3 ответа

Вы можете попробовать ниже - используя самостоятельное соединение

DEMO

update tablename t
join
(select b.id,b.groupname,count(b.id) as val from t1 a
join t1 b on a.groupname=b.groupname
and a.id<=b.id
group by b.id,b.groupname
)d on t.id=d.id
set value=val

ИЛИ

вы можете использовать [ 112] функция, если ваша версия mysql 8.0+

update tablename t
join
(
  select *, row_number() over(partition by groupname order by id) as rn from t1 
)d on t.id=d.id
set value=rn
0
ответ дан fa06 5 March 2019 в 07:34
поделиться

В старых версиях MySQL переменные являются самым простым методом:

set @rn := 0;
set @grp := '';

update t
    set value = (@rn := if(@grp = t.group, @rn + 1,
                           if(@grp := t.group, 1, 1)
                          )
                )
    order by group, id;

В MySQL 8.0 используйте второй запрос fa06.

0
ответ дан Gordon Linoff 5 March 2019 в 07:34
поделиться

Пожалуйста, попробуйте это, я надеюсь, что это полезно для вас

Update A 
set value = _val
from @tblName As A
INNER JOIN (
SELECT id,Row_NUMBER() over(partition by [group] order by id) as _val  from  @tblName
)As B ON A.id = B.id
0
ответ дан Hemang Aghera 5 March 2019 в 07:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: