MySQL/SQL: Обновление со связанным подзапросом от самой обновленной таблицы

Вам, вероятно, нужно использовать селектор x $ jQuery, поскольку ваши идентификаторы содержат двоеточия: https://openntf.org/XSnippets.nsf/snippet.xsp?id=x-jquery-selector-for-xpages [ 110].

20
задан emsimpson92 2 July 2018 в 15:59
поделиться

3 ответа

После двух полученных мной ответов (ни один из которых не был полным, поэтому я написал свой собственный), в конечном итоге я сделал следующее:

UPDATE Table AS target
INNER JOIN 
(
select category, appearances_sum
from Table T inner join (
    select category as cat, sum(appearances) as appearances_sum
    from Table
    group by cat
) as agg
where T.category  = agg.cat
group by category
) as source
ON target.category = source.category
SET target.probability = target.appearances / source.appearances_sum 

Он работает очень быстро. Я также пробовал использовать коррелированный подзапрос, но он был намного медленнее (на несколько порядков), поэтому я придерживаюсь соединения.

48
ответ дан 29 November 2019 в 23:02
поделиться

Вот как это делается в mssql, я думаю, что mysql такой же или похожий:

create table T (id int, ratio float, appearances int)
insert T values (1, null, 2)
insert T values (1, null, 3)

update T
set ratio = cast(appearances as float)/ agg.appearancesSum
from T join (
    select id, sum(appearances) as appearancesSum
    from T
    group by id
) as agg on t.id = agg.id
2
ответ дан 29 November 2019 в 23:02
поделиться

Использовать объединения сразу после UPDATE: Справочное руководство - 13.2.11 Синтаксис UPDATE

, поэтому ОБНОВЛЕНИЕ table1 внутреннего соединения table2 на .... установить table1.foo = значение где table2.bla = someothervalue

В таких случаях всегда смотрите руководство. MySql имеет надлежащее справочное руководство, поэтому найти правильный синтаксис не должно быть так сложно;)

6
ответ дан 29 November 2019 в 23:02
поделиться
Другие вопросы по тегам:

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