HEAVEN AND HELL
http://www.heavenandhell.fr/

MySQL quelqu'un ??
http://www.heavenandhell.fr/viewtopic.php?f=7&t=1818
Page 1 sur 1

Auteur:  Becks [ 20 Déc 2004 19:43 ]
Sujet du message:  MySQL quelqu'un ??

J'ai 2 tables Tab_A et Tab_B avec un champ commun (appelons le champ_commun)
Je veux récuperer tous les enregistrements de Tab_B dont la valeur de champ_x (un champ de Tab_A) équivaut à un nombre "n".

J'essaie de faire ca avec une jointure :

SELECT * FROM 'Tab_B'
JOIN Tab_A ON ( Tab_A.champ_commun = Tab_B.champ_commun )
WHERE Tab_A.champ_x = n

Mais ca ne marche pas.
Comment faire ? :?

Auteur:  Chipstouille [ 20 Déc 2004 19:51 ]
Sujet du message: 

SELECT * FROM Tab_B, Tab_A WHERE Tab_A.champ_x = n AND Tab_A.champ_commun = Tab_B.champ_commun

J'avoue je ne connais pas (edit) la syntaxe MySQL pour (/edit) les jointures, mais faire ça, ça revient au même...

A noter:
Si tu crées un index sur le 'champ_commun' des deux tables, tu gagneras énormément de temps d'exécution, il en est de même pour l'ordre des conditions après le WHERE, faut commencer par les filtres les plus sélectifs (ici champ_x = n) pour terminer par les jointures...

Avec des identifiants du type Tab_BId et Tab_AId, ça serait beaucoup plus clair...
Surtout que là, on ne sait pas trop où tu en es pour la cardinalité des tes jointures...
Est-ce que pour un enregistrement de Tab_A, tu as plusieurs enregitresments de Tab_B?
L'inverse?
Ou alors tu dois pouvoir joindre plusieurs Tab_B à Tab_A et plusieurs Tab_A à Tab_B (dans ce cas là, il te faut une troisième table de relation entre Tab_A et Tab_B...

Auteur:  Becks [ 20 Déc 2004 20:05 ]
Sujet du message: 

L'inconvénient de cette méthode est que je dois préciser tous les champs de Tab_B dans le SELECT alors que je les veux tous (Là il me prendra tous les champs de Tab_A aussi). Heureusement il y en a peu.

Dans tous les cas, ca marche. Merci.

Auteur:  Chipstouille [ 20 Déc 2004 20:10 ]
Sujet du message: 

C'est toujours mieux en général de lister les champs que tu souhaites dans une requête, sinon si tu modifies ta table, et que par malheur les champs se décalent lors d'un SELECT *, l'erreur te sautera pas forcément à la figure et tu vas bien galérer pour comprendre ce qu'ils se passe :)

Sinon, pour les jointures, je pense qu'il faut déclarer les champs des jointures en tant que tel lorsque que tu crées ta table...(si tu ne l'a pas fait...)

Doit bien y avoir de la doc potable sur MySQL qui traine quelquepart je pense :)

Page 1 sur 1 Heures au format UTC + 1 heure
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/