Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Update max из одинаковых кроме id значений
|
|||
|---|---|---|---|
|
#18+
Добрый вечер. Обычно хватает только описать проблему и решение само находится, но здесь я что то явно туплю Мне нужно обнулить первое или второе значение из двух одинаковых пришедших, то есть грубо говоря update set = 0 where id = (выбранное одно значение where (число одинаковых значений >1) ) Таблица1 ID Место Нулевость 346905 107797 1 346907 107797 1 Таблица2 ID Ключ Место Расположение 1694613 zs0001 107797 1 1694612 zs0001 107797 1 Собственно написал такое UPDATE таблица1 SET таблица1.Нулевость = 0 FROM таблица2 INNER JOIN таблица1 ON таблица2.Место = таблица1.Место AND таблица1.Нулевость = 1 where таблица1.ID in (select max(таблица1.Место) FROM таблица2 INNER JOIN таблица1 ON таблица2.Место = таблица1.Место AND таблица1.Нулевость = 1 WHERE таблица2.Ключ = @Ключ AND (SELECT COUNT(*) FROM таблица2 INNER JOIN таблица1 ON таблица2.Место = таблица1.Место AND таблица2.Ключ = @Ключ AND таблица2.Расположение = 1 ) > 1 group by таблица1.Место) Похоже я что то неправильно воспринимаю, как работает max, он разве не должен дать одну строку максимальную по группируемому? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2019, 21:32 |
|
||
|
Update max из одинаковых кроме id значений
|
|||
|---|---|---|---|
|
#18+
BulgatПохоже я что то неправильно воспринимаю, как работает max, он разве не должен дать одну строку максимальную по группируемому?Функция max возвращает значение, а не строку. select max(таблица1.Место) возвращает из нескольких чисел Место то, которое самое большое. То есть 107797. А потом вы обновляете тот ID, который равен этому числу Место То есть абсурдная операция получается. Помочь написать запрос не могу, мне непонятна связка таблиц таблица1 и таблица2 Какая то страшная связка по неуникальным (в обоих таблицах) полям, смотреть больно, пойду почитаю Дейта, что бы успокоиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2019, 22:46 |
|
||
|
Update max из одинаковых кроме id значений
|
|||
|---|---|---|---|
|
#18+
alexeyvgПомочь написать запрос не могу, мне непонятна связка таблиц таблица1 и таблица2 Какая то страшная связка по неуникальным (в обоих таблицах) полям, смотреть больно, пойду почитаю Дейта, что бы успокоиться.Кстати, у вас и пост в форум задвоился. Думаю, это как то связано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2019, 22:47 |
|
||
|
Update max из одинаковых кроме id значений
|
|||
|---|---|---|---|
|
#18+
для таких вещей есть два подхода подзапрос с count, и по нему уже фильтровать id, где >1 либо оконные функции, модные и пачечно шустрые прокатывает вот такое, например select id,a,b,c,d ,count(*) over (partition by field/10) from table --where (count(*) over (partition by field/10))>1 но то, что закомменчено - не прокатывает, к сожалению, может допилят тогда можно будет одним селектом/апдейтом обходиться а сейчас это будет подзапрос, да ещё с distinct поэтому в данном случае проще фильтровать традиционным подзапросом select id,count(*) from table group by id но оконки часто бывают удобнее, если допрасчет нужен для какой-нибудь жути из серии update t set c=0 from table t, ( select id ,b/(avg(a) over (partition by field/10)) r ,b/(avg(a) over (partition by field)) rr from table ) f where t.id=f.id and f.r>f.rr ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2019, 09:22 |
|
||
|
Update max из одинаковых кроме id значений
|
|||
|---|---|---|---|
|
#18+
Bulgat... Давай для начала в данных разберемся Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. У тебя при соединении этих таблиц по полю [место] на выходе будет 4 строки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2019, 10:51 |
|
||
|
Update max из одинаковых кроме id значений
|
|||
|---|---|---|---|
|
#18+
Bulgat, Вам нужно просветление по части реляционной теории баз данных. Иначе будет непонимание, почему "я думаю так, а оно вот этак". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2019, 13:44 |
|
||
|
Update max из одинаковых кроме id значений
|
|||
|---|---|---|---|
|
#18+
Руслан ДамировичУ тебя при соединении этих таблиц по полю [место] на выходе будет 4 строки.Ничего вы не понимаете, он же соединяет [место] и [id]! И никаких дубликатов! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2019, 15:19 |
|
||
|
Update max из одинаковых кроме id значений
|
|||
|---|---|---|---|
|
#18+
alexeyvgРуслан ДамировичУ тебя при соединении этих таблиц по полю [место] на выходе будет 4 строки.Ничего вы не понимаете, он же соединяет [место] и [id]! И никаких дубликатов! Н-да, невнимательно смотрел... Но предположим, что ТС ошибся при написании скрипта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2019, 15:57 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39804031&tid=1687931]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
102ms |
get topic data: |
14ms |
get forum data: |
4ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
| others: | 233ms |
| total: | 455ms |

| 0 / 0 |
