Probleme jointure entre table

profiter Messages postés 211 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 15 mars 2013 - 3 sept. 2011 à 16:44
Celfyk Messages postés 5 Date d'inscription mercredi 7 septembre 2011 Statut Membre Dernière intervention 7 septembre 2011 - 7 sept. 2011 à 17:18
bonjour,
j'ai deux tables :

voici le code de creation :
public static final String table_facture_f__Name = "facture_f";
static final String[] TABLE_fature_f = 
{ 
"n_facture_f varchar(20) NOT NULL" , 
"date_ff date NOT NULL" ,
"id_f int not null " ,
"mt_ht_ff double precision not null ",
"mt_ttc_ff double precision not null " ,
"mp double precision ",
"rp double precision ",
"PRIMARY KEY (n_facture_f, id_f)" , 
"CONSTRAINT FKPRq FOREIGN KEY (id_f) REFERENCES fournisseur (id_f) ",
        };

public static final String table_contenu_ff_Name = "contenu_ff";
static final String[] TABLE_contenu_ff = 
{ 
"n_commande_f int(6) zerofill  NOT NULL" , 
"n_facture_f varchar(20) NOT NULL" ,
"id_f int not null",
"CONSTRAINT qz4 FOREIGN KEY (id_f) REFERENCES fournisseur (id_f) " ,
"constraint a1e PRIMARY KEY (n_commande_f)",
"CONSTRAINT a2v FOREIGN KEY (n_commande_f) REFERENCES commande_f (n_commande_f) ", 
"CONSTRAINT a3xw FOREIGN KEY (n_facture_f) REFERENCES facture_f (n_facture_f) "
        };	


je veux afficher le numero et la date et le total ht et le total ttc et la livraison
quand le numero de facture egale dans la table contenu_ff a une valeur donné et le id_f egale a une valeur donné dans les deux tables

alors j'aifait :
String req2 "select contenu_ff.n_commande_f, date_cf ,t_ht,t_ttc, livraison  from commande_f, contenu_ff where contenu_ff.id_f commande_f.id_f  and contenu_ff.n_facture_f = '" + num +"'and contenu_ff.id_f = '"+ obj+"' ";
rs = st.executeQuery(req2);

mais ca me affiche n'importe quoi
avez vous une idee
merci bien

3 réponses

profiter Messages postés 211 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 15 mars 2013 8
3 sept. 2011 à 16:47
en faite j'ai oublié voici la premiere table :
public static final String table_commande_f_Name = "commande_f";
static final String[] TABLE_commande_f = 
{ 
"n_commande_f int(6) zerofill  AUTO_INCREMENT NOT NULL" , 
"id_f int not null ",
"date_cf date not null" ,
"t_ht double precision not null",
"t_ttc double precision not null ", 
"livraison varchar(10) not null",
"facturation varchar(10) not null",
"PRIMARY KEY (n_commande_f)",
"CONSTRAINT FK_FCT_PRS FOREIGN KEY (id_f) REFERENCES fournisseur (id_f) " 
        };	


c'est pas facture_f
merci de votre comprehension
0
Celfyk Messages postés 5 Date d'inscription mercredi 7 septembre 2011 Statut Membre Dernière intervention 7 septembre 2011
7 sept. 2011 à 16:52
Bonjour,
si c'est un copier coller de tes tables, il y a déjà un problème de nommage :

static final String[] TABLE_facture_f =

Pour le reste je regarde.
0
Celfyk Messages postés 5 Date d'inscription mercredi 7 septembre 2011 Statut Membre Dernière intervention 7 septembre 2011
7 sept. 2011 à 17:18
Plusieurs remarques :
[list][*] tu veux que contenu_ff.id_f = commande_f.id_f ET contenu_ff.id_f = '"+ obj+"' " , ce qui reviens à dire que commande_f.id_f = '"+ obj+"' " ?? pourquoi pas mais de mon point de vu, cela peux entrainer des erreurs.

[*] pour plus de lisibilité et éviter les risques de confusion, garde un format [table].[champ] à chaque fois

[*] Encore pour la lisibilité, ajoute des alias au nom de tes tables (ex : FROM table AS alias)

[*] Pour préserver tes yeux et ceux de ton prochain, quand tu as la chance d'utiliser des noms de tables et de champs en minuscules, met les instructions SQL en majuscules.

[*] Toujours pour la lisibilité, segmente l'implémentation de ta variable utilisée pour la requête. Au risque d'alourdir un petit peu le temps d'exécution (je ne sais pas, c'est peut être préjudiciable dans certain cas)
/list

Après ces conseils avisés, voici ce que j'en dis :

String req2 = "SELECT cont.n_commande_f, comd.date_cf ,comd.t_ht,t_ttc, comd.livraison";
req2 += "FROM commande_f AS comd";
req2 += "INNER JOIN contenu_ff AS cont";
req2 +"ON cont.n_facture_f '" + num +"'";
req2 +"AND comd.id_f commande_f.id_f";
req2 +"AND comd.id_f '"+ obj+"'";
req2 += ";";


J'espère que cela te seras utile.
Bonne continuation.
0