🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.bazy-danych
Article #194651

Re: PostgreSQL - jak zredagować SQL?

#194651
From: hubert depesz lubaczewski
Date: Wed, 23 Sep 2015 08:42
34 lines
2067 bytes
On 2015-09-22, Marek <precz@spamowi.com> wrote:
> Witam,
>
> Mam zapytanie działające w skrócie w/g schematu:
>
> UPDATE ratings SET games=games+1, ... , FROM user ... (subquery)
>
> Sprawdziłem - subquery zwraca mi dwa rekordy co obrazowo można zapisać tak:
>
>
> UPDATE ratings SET games=games+1, ..., WHERE user_id IN (9,9);
>
> Kłopot w tym, że aktualizacja wykona się tylko raz a ja bym chciał aby 
> wykonała się dwa razy bo użytkownik o ID 9 odbył dwa mecze a nie jeden. 
> Jak to zapisać aby wykonało się więcej niż jeden raz?
> Zapytanie w oryginale jest rozbudowane, nie tylko zlicza gry ale jeszcze 
> parę innych danych więc nie chce go przytaczać w całości.

załóżmy, że subquery zwraca kolumnę nazywającą się user_id.

wtedy:
with users_to_update as ( subquery ),
    update_by as (select user_id, count(*) from users_to_update group by
    user_id)
update ratings r
set games = r.games + x.count
from update_by as x
where x.user_id = r.user_id;

depesz

-- 
The best thing about modern society is how easy it is to avoid contact with it.
                                                             http://depesz.com/
Technical Details
Message-ID: <t75adc-515.ln1@depesz.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!goblin1!goblin.stu.neva.ru!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!unt-spo-a-02.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
References: <mtrd71$eu8$1@news.icm.edu.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!goblin1!goblin.stu.neva.ru!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!unt-spo-a-02.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
Newsgroups: pl.comp.bazy-danych
From: hubert depesz lubaczewski <depesz@depesz.com>
Subject: Re: PostgreSQL - jak zredagować SQL?
References: <mtrd71$eu8$1@news.icm.edu.pl>
Organization: depesz Software
Reply-To: depesz@depesz.com
User-Agent: slrn/1.0.2 (Linux)
Mime-Version: 1.0
Date: Wed, 23 Sep 2015 10:42:05 +0200
Message-ID: <t75adc-515.ln1@depesz.com>
Lines: 34
NNTP-Posting-Host: 95.49.209.153
X-Trace: 1442998206 unt-rea-a-02.news.neostrada.pl 27524 95.49.209.153:51343
X-Complaints-To: abuse@news.neostrada.pl
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit