Précédent   Forum du club des développeurs et IT Pro > Bases de données > Firebird > Débuter
Débuter Forum d'entraide pour débuter avec Firebird
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 20/03/2012, 14h01   #21
makowski
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 255
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant spécialité Firebird
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 2 255
Points : 3 575
Points : 3 575
Citation:
Envoyé par lepatantpato Voir le message
Je joins la requête
essayer :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT DISTINCT  
ETAT.NUMERO ,  
ETAT.PRODUIT_ID,
PFOURNISSEUR.CODE,
PRODUIT.DESIGNATION,
SORTIE.DLU,
FOURNISSEUR.NOM, 
SORTIE.DATE
 
FROM  ETAT JOIN PFOURNISSEUR ON  
JOIN PRODUIT ON ETAT.PRODUIT_ID=PRODUIT.PRODUIT_ID
JOIN SORTIE ON  SORTIE.NUMERO=ETAT.NUMERO 
JOIN FOURNISSEUR ON ETAT.FOURNISSEUR_ID=FOURNISSEUR.FOURNISSEUR_ID
LEFT JOIN FIN ON ETAT.NUMERO =  FIN.NUMERO
WHERE  PFOURNISSEUR.CODE IN   ('125500','789120','997788','123789')
AND ETAT.NUMERO  IS NULL
__________________
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/03/2012, 14h07   #22
lepatantpato
Membre à l'essai
 
Homme
Développeur informatique
Inscription : février 2012
Messages : 78
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Enseignement

Informations forums :
Inscription : février 2012
Messages : 78
Points : 20
Points : 20
Par défaut heu...

Heu, finalement, qu'est-ce que je dois faire ?

A
exit
B
quit
C
commit
quit
D commit
exit
E
Adieu camarade
la bonne réponse est ?

Lépatantpato
lepatantpato est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/03/2012, 22h43   #23
lepatantpato
Membre à l'essai
 
Homme
Développeur informatique
Inscription : février 2012
Messages : 78
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Enseignement

Informations forums :
Inscription : février 2012
Messages : 78
Points : 20
Points : 20
Par défaut houla !

A P.Makowski

Avec ton code, ma requête passe de 8 secondes à... 0 seconde ! Merci; c'est vraiment top.
Cdt
LépatantPato
lepatantpato est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2012, 18h58   #24
lepatantpato
Membre à l'essai
 
Homme
Développeur informatique
Inscription : février 2012
Messages : 78
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Enseignement

Informations forums :
Inscription : février 2012
Messages : 78
Points : 20
Points : 20
Par défaut snif...

Bonjour à tous
et en particulier à P. Makowski

Je nage en plein mystère.... Ton code qui , hier, corrigeait le mien était parfait, et me convenait très bien. Mais aujourd'hui je rencontre avec le même code un problème que je ne comprends pas:
L'erreur rencontrée est : Token unknown à la ligne 11, JOIN.
Je ne comprends pas l'erreur, d'autant plus que cela fonctionnait hier...
Voyez-vous où se situe le problème ?
(j'ai utilisé Flamerobin et isql).
Merci
Lépatantpato
lepatantpato est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2012, 20h01   #25
SergioMaster
Modérateur
 
Avatar de SergioMaster
 
Homme Serge Girard
Développeur informatique
Inscription : janvier 2007
Messages : 4 205
Détails du profil
Informations personnelles :
Nom : Homme Serge Girard
Âge : 56
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : janvier 2007
Messages : 4 205
Points : 7 260
Points : 7 260
Ligne 10 du code il manque la condition de jointure entre ETAT et PFOURNISSEUR . cela m'avait échappé déjà dans ma proposition de refonte avec des JOIN

Code ligne 10 :
FROM  ETAT JOIN PFOURNISSEUR ON  ETAT.FOURNISSEUR_ID= FOURNISSEUR.FOURNISSEUR_ID
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous
SergioMaster est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2012, 21h53   #26
lepatantpato
Membre à l'essai
 
Homme
Développeur informatique
Inscription : février 2012
Messages : 78
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Enseignement

Informations forums :
Inscription : février 2012
Messages : 78
Points : 20
Points : 20
Par défaut colonne inconnue !

Merci SergioMaster!

mais j'ai un message d'erreur sur la ligne 10
Fournisseur.Fournisseur_ID : column unknown (et non token unknown, pour une fois). Or, bien entendu, cette colonne existe. Je suppose que l'erreur vient de plus bas, mais je ne vois toujours pas.
Aucune référence au fichier Fournisseur n'est faite, d'ailleurs.
La ligne 13 ressemble à la 10, mais bon, je suis perdu.
Cdt
LépatantPato
lepatantpato est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2012, 07h31   #27
SergioMaster
Modérateur
 
Avatar de SergioMaster
 
Homme Serge Girard
Développeur informatique
Inscription : janvier 2007
Messages : 4 205
Détails du profil
Informations personnelles :
Nom : Homme Serge Girard
Âge : 56
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : janvier 2007
Messages : 4 205
Points : 7 260
Points : 7 260
désolé , un mauvais copier coller
La relation doit se faire sur la table PFOURNISSEUR et non FOURNISSEUR
Maintenant quelle est cette relation entre les 2 ? y en a t'il une , pas facile de le déduire de ton sql de départ . En relisant attentivement ,je m’aperçois que c'est mon premier Copier/Coller qui a du a un moment (j'ai pour habitude de mettre une ligne par jointure , la jointure étant en début de ligne)

Code ton SQL :
1
2
 
AND PFOURNISSEUR.PRODUIT_ID=PRODUIT.PRODUIT_ID
donc le join était en plus 'mal' placé

avec l'amélioration de makowski (grand merci pour la leçon Quit vs Exit) cela donnerai

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
SELECT DISTINCT  
ETAT.NUMERO ,  
ETAT.PRODUIT_ID,
PFOURNISSEUR.CODE,
PRODUIT.DESIGNATION,
SORTIE.DLU,
FOURNISSEUR.NOM, 
SORTIE.DATE
 
FROM  ETAT  
JOIN PRODUIT ON ETAT.PRODUIT_ID=PRODUIT.PRODUIT_ID
JOIN PFOURNISSEUR ON PFOURNISSEUR.PRODUIT_ID=PRODUIT.PRODUIT_ID
JOIN SORTIE ON  SORTIE.NUMERO=ETAT.NUMERO 
JOIN FOURNISSEUR ON ETAT.FOURNISSEUR_ID=FOURNISSEUR.FOURNISSEUR_ID
LEFT JOIN FIN ON ETAT.NUMERO =  FIN.NUMERO
WHERE  PFOURNISSEUR.CODE IN   ('125500','789120','997788','123789')
AND ETAT.NUMERO  IS NULL
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous
SergioMaster est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2012, 08h10   #28
lepatantpato
Membre à l'essai
 
Homme
Développeur informatique
Inscription : février 2012
Messages : 78
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Enseignement

Informations forums :
Inscription : février 2012
Messages : 78
Points : 20
Points : 20
Par défaut encore moi

Bonjour
J’ai apporté le correctif. Je n’ai plus de message d'erreur ! mais par contre aucun résultat.
J’explique ici le but poursuivi, en essayant d’être clair, mais j’ai conscience de ne pas l’être tant que ça…
En tout cas, merci de m’aider.
Cdt.
Lépatantpato

En fait, dans mon code de départ :
Mon but est d’extraire de ETAT tout NUMERO qui n’est pas dans FIN.
18 WHERE ETAT.NUMERO NOT IN (SELECT FIN.NUMERO FROM FIN)

Puis en ligne 19 j’ai le numéro du produit correspondant (dont je veux le nom, PRODUIT.DESIGNATION)
19 AND ETAT.PRODUIT_ID=PRODUIT.PRODUIT_ID

Ensuite, la ligne 20 me donne
20 AND SORTIE.NUMERO=ETAT.NUMERO
Le lien avec le fichier SORTIE me donne SORTIE.DATE et SORTIE.DLU

La ligne 21
21 AND PFOURNISSEUR.PRODUIT_ID=PRODUIT.PRODUIT_ID
Donne le lien avec PFOURNISSEUR qui va permettre le critère utilisé en 23

la ligne 22
Donne le FOURNISSEUR dont je désire le nom, FOURNISSEUR.

Et la ligne 23
AND PFOURNISSEUR.CODE IN ('125500','789120','997788','123789');

Permet de chercher les valeurs désirées.
lepatantpato est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2012, 12h40   #29
makowski
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 255
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant spécialité Firebird
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 2 255
Points : 3 575
Points : 3 575
Pardon j'avais mal lu et donc fait une grossière erreur

c'est plutot quelque chose du genre de ce qui suit, ma première ne pouvait que ne rien renvoyer, sauf s'il y avait des valeurs null dans ETAT.NUMERO, ce qui n'était pas ce qui était recherché

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT DISTINCT  
ETAT.NUMERO ,  
ETAT.PRODUIT_ID,
PFOURNISSEUR.CODE,
PRODUIT.DESIGNATION,
SORTIE.DLU,
FOURNISSEUR.NOM, 
SORTIE.DATE
 
FROM  ETAT  
JOIN PRODUIT ON ETAT.PRODUIT_ID=PRODUIT.PRODUIT_ID
JOIN PFOURNISSEUR ON PFOURNISSEUR.PRODUIT_ID=PRODUIT.PRODUIT_ID
JOIN SORTIE ON  SORTIE.NUMERO=ETAT.NUMERO 
JOIN FOURNISSEUR ON ETAT.FOURNISSEUR_ID=FOURNISSEUR.FOURNISSEUR_ID
WHERE  PFOURNISSEUR.CODE IN   ('125500','789120','997788','123789')
AND NOT EXISTS (SELECT 1 FROM FIN WHERE ETAT.NUMERO = FIN.NUMERO)
__________________
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2012, 19h56   #30
lepatantpato
Membre à l'essai
 
Homme
Développeur informatique
Inscription : février 2012
Messages : 78
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Enseignement

Informations forums :
Inscription : février 2012
Messages : 78
Points : 20
Points : 20
Par défaut et encore merci

à Philippe Makowski et SergioMaster et Barbibulle

Merci.
Tout marche ok
et en plus, je crois avoir compris !
cdt
LépatantPato
lepatantpato est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2012, 12h47   #31
makowski
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 255
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant spécialité Firebird
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 2 255
Points : 3 575
Points : 3 575
Citation:
Envoyé par SergioMaster Voir le message
un Backup fait un sweep donc ....

non
un backup avec gbak sans l'option -g parcours tous les enregistrements et déclenche donc un garbage collect, qui n'est pas exactement la même chose qu'un sweep
un sweep fait un peu plus que seulement le garbage collect
__________________
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2012, 13h12   #32
lepatantpato
Membre à l'essai
 
Homme
Développeur informatique
Inscription : février 2012
Messages : 78
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Enseignement

Informations forums :
Inscription : février 2012
Messages : 78
Points : 20
Points : 20
Par défaut Précision

Bonjour à tous
2 choses:
- 1 j'avais indiqué que la vitesse d'accès à ma base était très rapide, mais en fait je m'étais trompé
- 2 ma requête modifiée par PM fonctionne très bien, mais la durée de traitement, par rapport à la mienne, reste la même. Je suppose qu'il n'y a pas moyen de l'optimiser.

Cdt
Lépatantpato
lepatantpato est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2012, 13h42   #33
makowski
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 255
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant spécialité Firebird
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 2 255
Points : 3 575
Points : 3 575
Citation:
Envoyé par lepatantpato Voir le message
- 2 ma requête modifiée par PM fonctionne très bien, mais la durée de traitement, par rapport à la mienne, reste la même. Je suppose qu'il n'y a pas moyen de l'optimiser.
peut être que si
mais cherchez ce qui n'existe pas est toujours pénible
pour optimiser, il faudrait voir le plan d'abord et la structure des tables et des index
c'est quoi la clé primaire de ETAT ?

Citation:
Envoyé par lepatantpato Voir le message
- 1 j'avais indiqué que la vitesse d'accès à ma base était très rapide, mais en fait je m'étais trompé
ça veut dire quoi ça ?
__________________
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2012, 14h31   #34
SergioMaster
Modérateur
 
Avatar de SergioMaster
 
Homme Serge Girard
Développeur informatique
Inscription : janvier 2007
Messages : 4 205
Détails du profil
Informations personnelles :
Nom : Homme Serge Girard
Âge : 56
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : janvier 2007
Messages : 4 205
Points : 7 260
Points : 7 260
Citation:
Envoyé par makowski Voir le message
un backup avec gbak sans l'option -g parcours tous les enregistrements et déclenche donc un garbage collect, qui n'est pas exactement la même chose qu'un sweep
un sweep fait un peu plus que seulement le garbage collect
ça m'apprendra a être simpliste

pour continuer dans cette voie peut m'expliquer pourquoi il vaut mieux faire un Commit plutôt qu'un rollback après un Select ? bien qu'ayant une idée de la chose , j'aimerais confirmation
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous
SergioMaster est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2012, 18h20   #35
makowski
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 255
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant spécialité Firebird
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 2 255
Points : 3 575
Points : 3 575
pour ça le mieux est d'aller lire Pierre (http://www.ibphoenix.com/resources/d...search/doc_369)

mais en vite fait, un commit coûte moins de ressources qu'un rollback
__________________
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2012, 22h37   #36
lepatantpato
Membre à l'essai
 
Homme
Développeur informatique
Inscription : février 2012
Messages : 78
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Enseignement

Informations forums :
Inscription : février 2012
Messages : 78
Points : 20
Points : 20
Par défaut bonsoir

Bonsoir tout le monde

Pour répondre à PM :
- Je ne crois pas qu'il y ait une clé primaire

cdt
Lépatantpato
lepatantpato est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 01h00.


 
 
 
 
Partenaires

Hébergement Web