Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL > Requêtes
Requêtes Forum d'entraide sur les requêtes SQL spécifiques à PostgreSQL, les triggers, les vues, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/06/2011, 09h41   #1
Invité de passage
 
Homme Arnaud Parquet
Développeur Java
Inscription : mars 2010
Messages : 20
Détails du profil
Informations personnelles :
Nom : Homme Arnaud Parquet
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Développeur Java

Informations forums :
Inscription : mars 2010
Messages : 20
Points : 3
Points : 3
Par défaut Suppression de certaines lignes

Bonjour,

j'ai un petit concernant une requête, la voici :

Code :
1
2
3
4
 
SELECT code, ref, url_produit, prix 
FROM table_1
WHERE differente condition que n'ont pas d'importance ici :D
mon souci c'est que j'ai des résultats du genre :
Code :
1
2
3
4
5
 
10, 1525, www.monproduit_1.fr,10.25
10, 1525, www.monproduit_2.fr,10.25
10, 1525, www.monproduit_3.fr,10.25
11, 1527, www.monautreproduit_1.fr,100.25
et j'aimerais avoir comme résultats :

Code :
1
2
3
 
10, 1525, www.monproduit_3.fr,10.25
11, 1527, www.monautreproduit_1.fr,100.25
je souhaiterais prendre uniquement une ligne quand le code, la ref et le prix sont identiques, pour ne plus avoir de "doublons" (qui n'en sont pas vraiment en fait ...)

J'avais pensé à un LIMIT 1, mais je ne sais pas où le mettre exactement.

Ensuite, j'avais pensé à une boucle for :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
CREATE OR REPLACE FUNCTION nouvellefonction()
  RETURNS void AS
$BODY$
 
DECLARE 
 
	i record;
 
--FETCH FORWARD all FROM test;
BEGIN
FOR i IN SELECT code FROM table1
 
	LOOP
        INSERT INTO ma_table_temporaire (code, ref,url_produit, prix)
		SELECT code, ref, url_produit, prix
		FROM table1
		LIMIT 1;
	END LOOP;
	RETURN;
END
Mes résultats ainsi obtenus seront dans une table temporaire, et ensuite je peux les utiliser comme je le souhaite et refaire des traitements au besoin, mais ma solution apparemment ne fonctionne pas

j’espère avoir été relativement claire et merci d'avance
Gorfith est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2011, 09h57   #2
ced
Rédacteur/Modérateur

 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 3 823
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 36
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 3 823
Points : 6 440
Points : 6 440
Bonjour,

Et selon quel critère éliminer les pseudo-doublons ? Comment savoir quelle ligne garder et laquelle ne pas garder dans un doublon ?
Dans ton exemple, tu gardes "www.monproduit_3.fr" à cause du 3 qui est le chiffre le plus élevé dans l'URL ? Pas très pratique, comme critère discriminatoire
__________________
Rédacteur / Modérateur SGBD
Mes tutoriels et la FAQ MySQL

----------------------------------------------------
Pensez aux balises code et au tag
Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
ced est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2011, 11h01   #3
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 954
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 954
Points : 17 774
Points : 17 774
C'est surtout un modèle à chier !!!!!
En effet mélanger plusieurs données en une colonne (ici un nombre et une chaine) viole la première forme normale...
Dès lors ce n'est plus de base de données que l'on parle, mais de fichier COBOL.... Et là c'est une autre histoire !

Il est assez amusant de constater que de manière générale, les développeurs font trop de code client qui devrait être placé sur le serveur et à l'inverse tente de faire du code serveur (comme c'est le cas ici) alors que c'est du côté client que les données auraient du être parsées.....

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2011, 11h43   #4
Invité de passage
 
Homme Arnaud Parquet
Développeur Java
Inscription : mars 2010
Messages : 20
Détails du profil
Informations personnelles :
Nom : Homme Arnaud Parquet
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Développeur Java

Informations forums :
Inscription : mars 2010
Messages : 20
Points : 3
Points : 3
ced, en fait j'ai un peu simplifié les choses mais le champ "url_produit" provient d'une autre table et je peux récupérer l'id et donc je garde la ligne ou l'id est le plus grand
Unitairement j'arrive à le faire, pour un article donné je mets code_article dans le where, une limit 1 à la fin et voila le tour est joué
par contre pour chaque article vérifier si il y a plus d'un enregistrement, si oui alors je fais ma requête unitaire que j'ai fait au dessus que pour cette article là. mais au niveau de la syntaxe ça bloque, je ne vois pas où j'ai pu faire une erreur de syntaxe au niveau de ma boucle FOR :s
(J'ai toujours travaillé sous oracle et avec les curseur je me débrouillais mieux :s j'ai un peu de mal avec la syntaxe postgres parfois ...)

SQLpro, je reprends les donnée qui sont utilisées bien avant que j'arrive sur le projet, c'est sur c'est pas top mais je suis obligé de faire avec
Gorfith est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/06/2011, 16h04   #5
Invité de passage
 
Homme Arnaud Parquet
Développeur Java
Inscription : mars 2010
Messages : 20
Détails du profil
Informations personnelles :
Nom : Homme Arnaud Parquet
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Développeur Java

Informations forums :
Inscription : mars 2010
Messages : 20
Points : 3
Points : 3
j'ai trouvé ma solution, après une semaine où j'ai mis ce problème de coté.

pour information dans la requête a l’intérieur de ma boucle FOR il manquait la condition :
oui tout bête ...

merci pour vos réponses !
Gorfith est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h25.


 
 
 
 
Partenaires

Hébergement Web