Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

POSTGRESQL multi update a partir d'un même requête.

9 réponses
Avatar
WebShaker
Salut.

j'ai un nouveau problème.

je fais souvent une requête du type
SELECT idmailfolder, count(*) AS nbmail, sum(CASE unseen = 't' THEN 1
ELSE 0 END) AS nbunseen FROM mail;

C'est sensé me retourné le nombre de mails et le nombre de mails non lus

Je cherche à optimiser cette requête.

J'ai donc créée deux variables dans ma table mailfolder qui s'appelle
nbmail et nbunseen que je mets à jour chaque fois que je décode un
groupe de mails.

Seulement voilà pour les mettre à jour je n'ai pas trouvé comment faire
une seule requête.

Je fais ça actuellement,

UPDATE mailfolder SET
nbmail = (SELECT count(*) FROM mail WHERE idmailfolder = 1030629),
nbunseen = (SELECT sum(CASE WHEN is_seen ='f' THEN 1 ELSE 0 END) FROM
mail WHERE idmailfolder = 1030629)
WHERE idmailfolder = 1030629;

Hors c'est quand même dommage de faire deux requête distinctes alors que
mes deux valeurs peuvent être obtenues avec une seule requête...

Il y a sans doute une solution!
non?

Etienne

9 réponses

Avatar
SQLpro
Bonjour,

UPDATE mailfolder
SET nbmail = T.N
nbunseen = T.S
WHERE idmailfolder = 1030629
EXISTS(SELECT COUNT(*) AS N,
sum(CASE WHEN is_seen ='f' THEN 1 ELSE 0 END) AS S
FROM mail AS M
WHERE M.idmailfolder = idmailfolder)


Mon livre, comme mon site web peuvent vous aider à écrire des requêtes SQL !

A +

Le 08/10/2010 23:41, WebShaker a écrit :
UPDATE mailfolder SET
nbmail = (SELECT count(*) FROM mail WHERE idmailfolder = 1030629),
nbunseen = (SELECT sum(CASE WHEN is_seen ='f' THEN 1 ELSE 0 END) FROM
mail WHERE idmailfolder = 1030629)
WHERE idmailfolder = 1030629




--
Frédéric BROUARD - expert SGBDR et SQL - MVP SQL Server - 06 11 86 40 66
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Enseignant Arts & Métiers PACA, ISEN Toulon et CESI/EXIA Aix en Provence
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
*********************** http://www.sqlspot.com *************************
Avatar
WebShaker
Le 09/10/2010 09:01, SQLpro a écrit :
UPDATE mailfolder
SET nbmail = T.N
nbunseen = T.S
WHERE idmailfolder = 1030629
EXISTS(SELECT COUNT(*) AS N,
sum(CASE WHEN is_seen ='f' THEN 1 ELSE 0 END) AS S
FROM mail AS M
WHERE M.idmailfolder = idmailfolder)



Hum? cela ne marche pas, mais en voulant trouver a quoi pouvait bien
servir le EXISTS (que je ne connaissait pas), je suis tombé sur la
solution de mon problème.

UPDATE mailfolder
SET nbmail = foo.nbmail, nbunseen = foo.nbunseen
FROM (SELECT count(*) AS nbmail, sum(CASE WHEN is_seen = 'f' THEN 1 ELSE
0 END) AS nbunseen FROM mail AS foo WHERE idmailfolder = 1030652) AS foo
WHERE idmailfolder = 1030652;

Donc Merci Quand même :)

Mon livre, comme mon site web peuvent vous aider à écrire des requêtes
SQL !



Ben je passe deja une bonne partie de mon temps sur ton site...
En fait vu tes connaissances tu devrais ajouter des meta sur ton site
pour que lorsqu'on fait une recherche dans google on tombe directement
dessus.
Un truc genre anticiper les problèmes des gens pour pointer sur la bonne
réponse...

Car 'UPDATE FROM TABLE' (par exemple) dans google ne renvoie pas sur ton
site, c'est bien dommage.

Etienne
Avatar
helios
WebShaker a écrit :
Le 09/10/2010 09:01, SQLpro a écrit :
UPDATE mailfolder
SET nbmail = T.N
nbunseen = T.S
WHERE idmailfolder = 1030629
EXISTS(SELECT COUNT(*) AS N,
sum(CASE WHEN is_seen ='f' THEN 1 ELSE 0 END) AS S
FROM mail AS M
WHERE M.idmailfolder = idmailfolder)



Hum? cela ne marche pas, mais en voulant trouver a quoi pouvait bien
servir le EXISTS (que je ne connaissait pas), je suis tombé sur la
solution de mon problème.




cela ne marche pas mais c'est normal vu l'auteur



UPDATE mailfolder
SET nbmail = foo.nbmail, nbunseen = foo.nbunseen
FROM (SELECT count(*) AS nbmail, sum(CASE WHEN is_seen = 'f' THEN 1
ELSE 0 END) AS nbunseen FROM mail AS foo WHERE idmailfolder = 1030652)
AS foo
WHERE idmailfolder = 1030652;

Donc Merci Quand même :)

Mon livre, comme mon site web peuvent vous aider à écrire des requêtes
SQL !



Ben je passe deja une bonne partie de mon temps sur ton site...



et c'est une perte de temps le seul moyen d'un perdre plus est de lire
le livre aussi

En fait vu tes connaissances tu devrais ajouter des meta sur ton site
pour que lorsqu'on fait une recherche dans google on tombe directement
dessus.
Un truc genre anticiper les problèmes des gens pour pointer sur la
bonne réponse...

Car 'UPDATE FROM TABLE' (par exemple) dans google ne renvoie pas sur
ton site, c'est bien dommage.



parle pas de catastrophe



Etienne
Avatar
WebShaker
Le 09/10/2010 10:43, helios a écrit :
cela ne marche pas mais c'est normal vu l'auteur
et c'est une perte de temps le seul moyen d'un perdre plus est de lire
le livre aussi
parle pas de catastrophe



Pour être honnête, ce newsgroup m'est super utile, et j'avoue que je ne
comprends pas ce besoin systématique de vous défouler sur Fréderic BROUARD.

Même si vous avez des différents, je doute que ce soit le bon endroit
pour les régler.

Cela n'a aucune utilité, ne défoule que vous et commence à friser le
ridicule.

Puisqu'il semble que ce newsgroup ne soit pas le mieux adapté aux
discussions concernant les bases de données multivaluées (qui ont sans
doute de grandes qualités), pourquoi ne pas simplement l'oublier et ne
plus y venir.

Etienne
Avatar
helios
WebShaker a écrit :
Le 09/10/2010 10:43, helios a écrit :
cela ne marche pas mais c'est normal vu l'auteur
et c'est une perte de temps le seul moyen d'un perdre plus est de lire
le livre aussi
parle pas de catastrophe



Pour être honnête, ce newsgroup m'est super utile, et j'avoue que je
ne comprends pas ce besoin systématique de vous défouler sur Fréderic
BROUARD.



cet individu cherche et a ce qu'il merite, c'est lui qui a commencé et
tant que ses tords ne seront pas reconnu je me defendrais


Même si vous avez des différents, je doute que ce soit le bon endroit
pour les régler.

Cela n'a aucune utilité, ne défoule que vous et commence à friser le
ridicule.



c'est l'endroit ou il a choisi de porter atteinte à mon honneur c'est
donc l'endroit ou je me defend quand au ridicule il ne tu pas (helas car
il serait déja mort)

Puisqu'il semble que ce newsgroup ne soit pas le mieux adapté aux
discussions concernant les bases de données multivaluées (qui ont sans
doute de grandes qualités), pourquoi ne pas simplement l'oublier et ne
plus y venir.



pour oublier il faudrait que certain m'oubli apres avoir reparer les
offenses qui m'on ete faite et qu'un certain Brouard rembourse les frais
d'avocat que ses plaintes farfelus on causé




Etienne
Avatar
BOUDOU Joseph
Sur fr.comp.applications.sgbd, WebShaker disait :

Puisqu'il semble que ce newsgroup ne soit pas le mieux adapté aux
discussions concernant les bases de données multivaluées



Ce groupe est tout à fait adapté pour héberger ces discussions. La
plupart des contributeurs seraient, je pense, intéressés, moi le
premier. Malheureusement il n'y a personne ici de suffisamment sérieux
et compétent pour en parler.

--
BOUDOU Joseph
Avatar
helios
BOUDOU Joseph a écrit :
Sur fr.comp.applications.sgbd, WebShaker disait :


Puisqu'il semble que ce newsgroup ne soit pas le mieux adapté aux
discussions concernant les bases de données multivaluées




Ce groupe est tout à fait adapté pour héberger ces discussions. La
plupart des contributeurs seraient, je pense, intéressés, moi le
premier. Malheureusement il n'y a personne ici de suffisamment sérieux
et compétent pour en parler.




plus exactement un groupe de meutier donc les interets sont la
persistence des dinosaures à base sql saborde tout post sur les SGBDMV

j'ai a plusieur reprise fait des essais de presentation mais ces
meutiers les ont sabordé avec des arguties style

- j'arrives pas a installé openqm alors que l'install est un packtage
Debian

- un debat sterile sur les sources de openqm

- un débat sterile sur la securité des SGBDMV

-un debat sterile sur mes diplomes

- un debat sterile sur les appli qui sont ou sont pas a France telecom
Avatar
Alain Montfranc
helios avait soumis l'idée :




Tas oublié la stricte équivalense entre un SGBDMV et un SGBD
traditionnel en utilisant des jointures adhoc
Avatar
helios
Alain Montfranc a écrit :
helios avait soumis l'idée :




Tas oublié la stricte équivalense entre un SGBDMV et un SGBD
traditionnel en utilisant des jointures adhoc




oui dans la liste des debats sterile il y a aussi cela car pretendre que
"la stricte équivalense entre un SGBDMV et un SGBD traditionnel en
utilisant des jointures adhoc " est comme si on affirmait qu'il suffit
de mettre un stylo dans les mains d'un chimpanzé pour qu'il écrive les
oeuvre compléte de Emile Zola ou d'Alexandre Dumas Pere ou Victor Hugo

le jour ou un chimpazé avec stylo ecrira des oeuvres comparable
j'admetrais qu'il suffit de mettre les bonne jointure sous SQL pour
avoir l'equivalent d'un SGBDMV

pour avoir l'equivalent d'un SGBDMV il manque un language de requete
extensible, les dico de fichier, un compilateur en LG4 reentrant interne
au moteur de sql et plein d'autre chose

pourquoi DATASTAGE est ecrit avec PICK-UNIVERSE et non pas avec SQL ?
pourquoi ORACLE US utilise PICK et non SQL pour son usage interne ?
pourquoi Temenos-globus est ecrit en JBASE et non en SQL ?