Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3116 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  MYSQL : Jointure externe excluant les id présents dans un table

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

MYSQL : Jointure externe excluant les id présents dans un table

n°1907528
scalapb
Posté le 22-07-2009 à 10:31:49  profilanswer
 

Bonjour,
 
N'étant pas trop fort voir assez faible en jointure externe,
je me demandais s'il était possible de passer par ce mécanisme pour faire l'équivalent de la requête suivante :
SELECT pa_id, pa_libel
FROM an_partenaire
WHERE pa_id not in ( SELECT po_pa_id FROM an_partenaire_autorise WHERE po_f_id = %s )
order by pa_libel ;
 
J'ai essayé cela mais du coup pas de clause sur le po_f_id (mais cela marche) :
SELECT pa_id, pa_libel
FROM an_partenaire
left join an_partenaire_autorise on pa_id = po_pa_id
WHERE po_pa_id is null
order by pa_libel ;
 
En essayant d'inclure la clause sur le po_f_id, la requête ne marche plus et ne me renvoie rien :
SELECT pa_id, pa_libel
FROM an_partenaire
left join an_partenaire_autorise on pa_id = po_pa_id
WHERE po_pa_id is null and po_f_id = %s
order by pa_libel ;
 
Est il possible de passer par une jointure externe pour remplacer ma requête imbriquée?
Est-ce que les jointures externes sont plus performantes en terme de ressources processeurs ? de ressources mémoires ?
 
Merci
A+

mood
Publicité
Posté le 22-07-2009 à 10:31:49  profilanswer
 

n°1907536
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 22-07-2009 à 10:40:07  profilanswer
 

Code :
  1. SELECT pa_id, pa_libel
  2. FROM an_partenaire INNER JOIN an_partenaire_autorise ON pa_id != po_pa_id
  3. WHERE po_f_if = %s
  4. ORDER BY pa_libel

Message cité 1 fois
Message édité par Harkonnen le 22-07-2009 à 10:42:07

---------------
J'ai un string dans l'array (Paris Hilton)
n°1907548
skeye
Posté le 22-07-2009 à 11:04:24  profilanswer
 

Harkonnen a écrit :

Code :
  1. SELECT pa_id, pa_libel
  2. FROM an_partenaire INNER JOIN an_partenaire_autorise ON pa_id != po_pa_id
  3. WHERE po_f_if = %s
  4. ORDER BY pa_libel


 

T'es sûr de toi là, ça me parait louche? [:autobot]
Je fais plutôt comme ça d'habitude, perso - en tout cas je trouve ça plus clair [:joce] :

 
Code :
  1. SELECT pa_id, pa_libel
  2. FROM an_partenaire LEFT OUTER JOIN an_partenaire_autorise ON (pa_id = po_pa_id AND po_f_if = %s)
  3. WHERE po_pa_id IS NULL
  4. ORDER BY pa_libel

Message cité 1 fois
Message édité par skeye le 22-07-2009 à 11:05:18

---------------
Can't buy what I want because it's free -
n°1907553
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 22-07-2009 à 11:10:59  profilanswer
 

skeye a écrit :


 
T'es sûr de toi là, ça me parait louche? [:autobot]


J'ai un peu lu le 1er post en biais, il est effectivement possible que je me sois loupé :D
Mais ça vaudrait le coup d'être testé quand même, ça ne me parait pas si idiot que ça [:jean-guitou]


---------------
J'ai un string dans l'array (Paris Hilton)
n°1907555
skeye
Posté le 22-07-2009 à 11:12:18  profilanswer
 

Harkonnen a écrit :


J'ai un peu lu le 1er post en biais, il est effectivement possible que je me sois loupé :D
Mais ça vaudrait le coup d'être testé quand même, ça ne me parait pas si idiot que ça [:jean-guitou]


 
Ta jointure sur une inégalité va pas lui retourner un quasi produit cartésien?[:autobot]


---------------
Can't buy what I want because it's free -
n°1907569
scalapb
Posté le 22-07-2009 à 11:45:24  profilanswer
 

Salut
 
Merci pour vos réponses rapides.
Alors la 1er "solution" proposer par le tueur d'Atréides ( Harkonnen ) ne marchait pas.
 
Celle proposer par skeye marche ( après modification de 'po_f_if' en 'po_f_id' )
J'ai bien des valeurs retournées. La table an_partenaire_autorise est vide à leur actuelle donc je reviendrai conclure après le peuplement de cette dernière.
 
Sinon, laquelle de ces deux requêtes vous semble la plus performante ?
 
Merci a+

n°1907572
skeye
Posté le 22-07-2009 à 11:50:34  profilanswer
 

scalapb a écrit :

Sinon, laquelle de ces deux requêtes vous semble la plus performante ?


Lesquelles? La tienne et la mienne, ou celle qui marche pas et la mienne? :D


---------------
Can't buy what I want because it's free -
n°1907594
tet2neu
emmerdeur
Posté le 22-07-2009 à 13:35:45  profilanswer
 

tu prends celle de skeye et tu fous un index sur les critères de jointure :o

 


En tout cas niveau performances je suis pas sûr de celle d'harko [:joce]


Message édité par tet2neu le 22-07-2009 à 13:36:51
n°1907642
scalapb
Posté le 22-07-2009 à 14:22:38  profilanswer
 

Au niveau des performances je parlais des requêtes fonctionnelles, donc de la mienne et de celle de skeye.
po_pa_id et po_f_id étaient déjà indexé car je savais de base qu'ils pouvaient servir
critères de jointure ou de liaison.
 
Mais on pouvais également étendre la question au cas générale et sans notion du SGBD utilisé :
Une requête imbriquée est elle plus performante qu'une requête avec jointure externe ?
 
En tout cas, grand merci
a+

n°1907645
skeye
Posté le 22-07-2009 à 14:24:33  profilanswer
 

En général la jointure est censée être plus performante...:D


---------------
Can't buy what I want because it's free -

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  MYSQL : Jointure externe excluant les id présents dans un table

 

Sujets relatifs
Trier une table by date[mySQL] problème à l'insertion de polygone
[MySQL] Requete avec JOIN : infos dans des bases différentesBesoin d'aide pour une requête MySQL jointe + affichage (hiérachie)
Tester si valeur existe dans une autre table.[MySQL]Regex dans un where
Importer fichier csv dans une tabletaille du span dans une cellule de table
[Access 2003]Créer une table à partir d'une requète[XML/php/Mysql] Caractere chinois
Plus de sujets relatifs à : MYSQL : Jointure externe excluant les id présents dans un table


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR