Size: a a a

pgsql – PostgreSQL

2021 March 17

𝕾

𝕾𝖔𝖚𝕷𝕭𝖆𝕯𝕲𝖚𝖄... in pgsql – PostgreSQL
Anatoly Shirokov
А откуда в твоем запросе появился A. Ведь он нигде у тебя не фигурирует
Извиняюсь в конце конечно запрос из A, сейчас исправлю
источник

𝕾

𝕾𝖔𝖚𝕷𝕭𝖆𝕯𝕲𝖚𝖄... in pgsql – PostgreSQL
Ilia Zviagin
Твой запрос неверный, он не может вообще работать. Шли верный, а не "что-то наподобие"
Исправил. Извиняюсь, там вобщем по контексту понятно, что Vote из A, поскольку в B нет такого столбца. Этот запрос работает с IN, но работает как я описал - не так как мне нужно
источник

ВС

Валерий Сергеев... in pgsql – PostgreSQL
Evgeniy Mihaylovsky
Я пишу как раз прямиком из доки))
А какие параметры хотите поменять?
источник

СК

Сергей Кравчук... in pgsql – PostgreSQL
UPDATE B SET points = points + amount*multi WHERE A.user_id = (SELECT user_id FROM А Where vote = 'что-то')

откуда таки берется  A.user_id ? если в верхнем уровне нигде нет таблицы А ?

update B set points = points + amount*multi from A where A.user_id=В.user_id

вот так пробовали ? решение прям в лоб
источник

IZ

Ilia Zviagin in pgsql – PostgreSQL
𝕾𝖔𝖚𝕷𝕭𝖆𝕯𝕲𝖚𝖄
Исправил. Извиняюсь, там вобщем по контексту понятно, что Vote из A, поскольку в B нет такого столбца. Этот запрос работает с IN, но работает как я описал - не так как мне нужно
Я не понял, где ты исправил...
источник

𝕾

𝕾𝖔𝖚𝕷𝕭𝖆𝕯𝕲𝖚𝖄... in pgsql – PostgreSQL
Мне по смыслу нужно что-то из серии:
Для каждого user_id из А, подходящего под условие vote ='something' посчитай для него A.amount*A.multi и прибавь в B.points.
Только нужно без циклов, а каким-то более простым синтаксисом
источник

AS

Anatoly Shirokov in pgsql – PostgreSQL
𝕾𝖔𝖚𝕷𝕭𝖆𝕯𝕲𝖚𝖄
Исправил. Извиняюсь, там вобщем по контексту понятно, что Vote из A, поскольку в B нет такого столбца. Этот запрос работает с IN, но работает как я описал - не так как мне нужно
Update B set ... where A.user_id ... - ничего не смущает?
источник

𝕾

𝕾𝖔𝖚𝕷𝕭𝖆𝕯𝕲𝖚𝖄... in pgsql – PostgreSQL
UPDATE B SET points = points + amount*multi WHERE B.user_id = (SELECT user_id FROM А Where vote = 'что-то')
источник

СК

Сергей Кравчук... in pgsql – PostgreSQL
𝕾𝖔𝖚𝕷𝕭𝖆𝕯𝕲𝖚𝖄
Мне по смыслу нужно что-то из серии:
Для каждого user_id из А, подходящего под условие vote ='something' посчитай для него A.amount*A.multi и прибавь в B.points.
Только нужно без циклов, а каким-то более простым синтаксисом
к тому что я написал чуть выше
and vote = 'что-то'
источник

IZ

Ilia Zviagin in pgsql – PostgreSQL
𝕾𝖔𝖚𝕷𝕭𝖆𝕯𝕲𝖚𝖄
UPDATE B SET points = points + amount*multi WHERE B.user_id = (SELECT user_id FROM А Where vote = 'что-то')
А поля amount, multi откуда?
Поставь для них тоже алиасы таблиц.
источник

𝕾

𝕾𝖔𝖚𝕷𝕭𝖆𝕯𝕲𝖚𝖄... in pgsql – PostgreSQL
Если для вашего удобства, то пожалуйста, сейчас поставлю. Если речь о том, как Postgresql воспринимает, работает и с ними и без, просто не так как надо)
UPDATE B SET B.points = B.points + A.amount*A.multi WHERE B.user_id = (SELECT user_id FROM А Where vote = 'что-то')
источник

IZ

Ilia Zviagin in pgsql – PostgreSQL
𝕾𝖔𝖚𝕷𝕭𝖆𝕯𝕲𝖚𝖄
Если для вашего удобства, то пожалуйста, сейчас поставлю. Если речь о том, как Postgresql воспринимает, работает и с ними и без, просто не так как надо)
UPDATE B SET B.points = B.points + A.amount*A.multi WHERE B.user_id = (SELECT user_id FROM А Where vote = 'что-то')
Ок, шикарно, откуда update возьмёт вдруг два поля из A ?
источник

СК

Сергей Кравчук... in pgsql – PostgreSQL
𝕾𝖔𝖚𝕷𝕭𝖆𝕯𝕲𝖚𝖄
Если для вашего удобства, то пожалуйста, сейчас поставлю. Если речь о том, как Postgresql воспринимает, работает и с ними и без, просто не так как надо)
UPDATE B SET B.points = B.points + A.amount*A.multi WHERE B.user_id = (SELECT user_id FROM А Where vote = 'что-то')
в вашем запросе, в верхнем уровне нет таблицы А
и тут не нужен подзапрос, особенно в таком виде )
источник

IZ

Ilia Zviagin in pgsql – PostgreSQL
𝕾𝖔𝖚𝕷𝕭𝖆𝕯𝕲𝖚𝖄
Если для вашего удобства, то пожалуйста, сейчас поставлю. Если речь о том, как Postgresql воспринимает, работает и с ними и без, просто не так как надо)
UPDATE B SET B.points = B.points + A.amount*A.multi WHERE B.user_id = (SELECT user_id FROM А Where vote = 'что-то')
Это тоже неверный запрос
источник

IZ

Ilia Zviagin in pgsql – PostgreSQL
𝕾𝖔𝖚𝕷𝕭𝖆𝕯𝕲𝖚𝖄
Если для вашего удобства, то пожалуйста, сейчас поставлю. Если речь о том, как Postgresql воспринимает, работает и с ними и без, просто не так как надо)
UPDATE B SET B.points = B.points + A.amount*A.multi WHERE B.user_id = (SELECT user_id FROM А Where vote = 'что-то')
Тебе join нужен, да, как Сергей говорит
источник

𝕾

𝕾𝖔𝖚𝕷𝕭𝖆𝕯𝕲𝖚𝖄... in pgsql – PostgreSQL
хм, ещё раз проверю сейчас
источник

IZ

Ilia Zviagin in pgsql – PostgreSQL
𝕾𝖔𝖚𝕷𝕭𝖆𝕯𝕲𝖚𝖄
хм, ещё раз проверю сейчас
Ты ещё раз проверь в следующий раз что ты прислал DDL и точный текст запроса прежде чем вопрос слать в чат. Не картинку с таблицей, а DDL полный. И запрос не в виде фантазий своих, а то что выполняется
источник

𝕾

𝕾𝖔𝖚𝕷𝕭𝖆𝕯𝕲𝖚𝖄... in pgsql – PostgreSQL
Ilia Zviagin
Ты ещё раз проверь в следующий раз что ты прислал DDL и точный текст запроса прежде чем вопрос слать в чат. Не картинку с таблицей, а DDL полный. И запрос не в виде фантазий своих, а то что выполняется
Извиняюсь ещё раз. Не на опыте :)
Сейчас попробовал, на первый взгляд работает.
Ключевая ошибка была в том, что я делал:
WHERE B.user_id = (Тут подзапрос из A)
А как написал:
WHERE B.user_id = A.user_id and vote='something'
Сразу заработало. Спасибо огромное!
источник

СК

Сергей Кравчук... in pgsql – PostgreSQL
𝕾𝖔𝖚𝕷𝕭𝖆𝕯𝕲𝖚𝖄
Извиняюсь ещё раз. Не на опыте :)
Сейчас попробовал, на первый взгляд работает.
Ключевая ошибка была в том, что я делал:
WHERE B.user_id = (Тут подзапрос из A)
А как написал:
WHERE B.user_id = A.user_id and vote='something'
Сразу заработало. Спасибо огромное!
Обращайтесь)
все мы ошибаемся, главное делать из этого правильные выводы
источник

IZ

Ilia Zviagin in pgsql – PostgreSQL
𝕾𝖔𝖚𝕷𝕭𝖆𝕯𝕲𝖚𝖄
Извиняюсь ещё раз. Не на опыте :)
Сейчас попробовал, на первый взгляд работает.
Ключевая ошибка была в том, что я делал:
WHERE B.user_id = (Тут подзапрос из A)
А как написал:
WHERE B.user_id = A.user_id and vote='something'
Сразу заработало. Спасибо огромное!
Что-то я соврал что заработало...
источник