Accueil > Forum > > > > Utiliser une clause WHERE avant un INNER JOIN
Utiliser une clause WHERE avant un INNER JOIN
mardi 17 avril 2007 à 04:45:52 |
Utiliser une clause WHERE avant un INNER JOIN

jean84
|
Hello Je souhaite realiser une jointure dans mes requetes sql. Le probleme, c'est que je dois utiliser une clause WHERE avant un INNER JOIN et que MySQL me renvoi toujours une erreur de syntaxe. Exemple : - 2 tables => admin & admin_secure - chaque table a un champ id pour clef primaire (jusqu'a la c'est courant) Ma requete : SELECT id, pass FROM admin WHERE id = 1 INNER JOIN admin_secure ON admin.id = admin_secure Je sais que ma requete ne veut pas dire grand chose, on dira que je n'ai pas trop le choix en fait (long a expliquer). Je suis oblige d'utilsier ce type de requete et c'est la premiere fois que j'utilise les jointures en sql.... j'aimerais recuperer le contenu de admin_secure mais je ne peut pas faire d'union  Si quelqu'un pouvait m'aider, sa serait top  Merci
|
|
mardi 17 avril 2007 à 10:13:32 |
Re : Utiliser une clause WHERE avant un INNER JOIN

J_G
|
Salut, Personnellement, j'ai jamais vraiment compris les différences entre les types de jointure SQL. Par exemple, la doc MySQL me dit : join_table:
table_reference [INNER | CROSS] JOIN table_factor [join_condition] | table_reference STRAIGHT_JOIN table_factor | table_reference STRAIGHT_JOIN table_factor ON condition | table_reference LEFT [OUTER] JOIN table_referencejoin_condition | table_reference NATURAL [LEFT [OUTER]] JOIN table_factor | table_reference RIGHT [OUTER] JOIN table_referencejoin_condition | table_reference NATURAL [RIGHT [OUTER]] JOIN table_factor
Beuh.... Partant de là, j'utilise toujours le left join qui correspond (dans mon esprit) à "si tu trouve, mets le resultat, sinon, laisse vide". Mais dans ton cas, l'erreur est la structure de ta requête (toujours la doc MySQL) : SELECT [ALL | DISTINCT | DISTINCTROW ] [HIGH_PRIORITY] [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT] [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]
select_expr, ... [FROM table_references [WHERE where_condition] [GROUP BY {col_name | expr | position} [ASC | DESC], ... [WITH ROLLUP]] [HAVING where_condition] [ORDER BY {col_name | expr | position} [ASC | DESC], ...] [LIMIT {[offset,] row_count | row_count OFFSET offset}] [PROCEDURE procedure_name(argument_list)] [INTO OUTFILE 'file_name' export_options | INTO DUMPFILE 'file_name' | INTO var_name [, var_name]] [FOR UPDATE | LOCK IN SHARE MODE]] Tout en sachant que (trois lignes plus loin) : table_references indicates the
table or tables from which to retrieve rows. Its syntax is
described in Section 13.2.7.1, "JOIN Syntax". Or join syntaxe : table_references:
table_reference [, table_reference] ...
table_reference:
table_factor | join_table
Nous voyons donc que les jointure arrivents EN MÊME TEMPS que la décalartion des tables ( et non après le WHERE ) Bref, as-tu pensé à faire une sous-requète ? SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2); SELECT s1 FROM t1 WHERE s1 = ANY (SELECT s1 FROM t2); SELECT s1 FROM t1 WHERE s1 IN (SELECT s1 FROM t2); ...
Bonne chance, et n'oubli pas de lire le manuel...
|
|
mardi 17 avril 2007 à 15:02:43 |
Re : Utiliser une clause WHERE avant un INNER JOIN

FhX
|
"Personnellement, j'ai jamais vraiment compris les différences entre les types de jointure SQL." Naturelles, équi, non-équi, autos, externes, hétérogènes, croisés et unions... ca en fait un bon paquet :p
http://sql.developpez.com/sqlaz/jointures/
|
|
mardi 17 avril 2007 à 15:45:20 |
Re : Utiliser une clause WHERE avant un INNER JOIN

J_G
|
A ben merci FhX, Avec ça je suis comblé... Ca m'a permit de revivre mes vieux cours de SQL : "La jointure croisée n'est autre que le produit cartésien de deux
tables. Rappelons que le produit cartésien de deux ensembles n'est
autre que la multiplication généralisée." Pardon !!! Qu'est-ce-qui dit là le monsieur ??? C'est à moi qui parle? Faut que je note ce truc, ça doit raporter un max de points au partiel... Ca m'a aussi fait découvrir l'opérateur BETWEEN. Et pis finalement, tout le reste je le savais (Le cross join n'est qu'une perte de temps à écrire, le mot outer est fourni en option, left ou right join j'utilise déjà et le full join, ben c'est union...) Par contre, Jean84, ces remarques sont pour toi : - Les jointures faites dans la clause WHERE
(ancienne syntaxe de 1986 !) ne permettent pas de faire la distinction
de prime abord entre ce qui relève du filtrage et ce qui relève de la
jointure.
- Il est à priori absurde de vouloir filtrer
dans le WHERE (ce qui restreint les données du résultat) et de voiloir
"élargir" ce résultat par une jointure dans la même clause WHERE de
filtrage.
- La lisibilité des requêtes est plus grande
en utilisant la syntaxe à base de JOIN, en isolant ce qui est du
filtrage et de la jointure, mais aussi en isolant avec clarté chaque
condition de jointures entre chaque couples de table.
- L'optimisation d'exécution de la requête est souvent plus pointue du fait de l'utilisation du JOIN.
- Lorsque
l'on utilise l'ancienne syntaxe et que l'on supprime la clause WHERE a
des fins de tests, le moteur SQL réalise le produit cartésiens des
tables ce qui revient la plupart du temps à mettre à genoux le serveur !
A+
|
|
mardi 17 avril 2007 à 15:46:47 |
Re : Utiliser une clause WHERE avant un INNER JOIN

J_G
|
Ah oui, si... NATURAL, je ne connaissais pas
Et STRAIGHT, c'est quoi ?
|
|
mardi 17 avril 2007 à 16:57:07 |
Re : Utiliser une clause WHERE avant un INNER JOIN

FhX
|
Le straight permet l'utilisation spécifique d'un ordre de table.
En effet, lors d'une relation, mysql vérifie quel est le coté de la relation la plus favorable et utilise la table favorisée en première. Lors d'un straight join, les tables sont dans l'ordre spécifié lors de l'écriture de la requète.
cf la doc :
L'ordre de lecture de tables forcé par LEFT
JOIN et STRAIGHT JOIN aidera
l'optimiseur de jointures (qui calcule l'ordre dans lequel les
tables doivent être jointes) à faire son travail plus
rapidement, puisqu'il y aura moins de permutations de tables à
vérifier.
|
|
mardi 17 avril 2007 à 16:57:58 |
Re : Utiliser une clause WHERE avant un INNER JOIN

FhX
|
"Pardon !!! Qu'est-ce-qui dit là le monsieur ??? C'est à moi qui parle?
Faut que je note ce truc, ça doit raporter un max de points au
partiel..." C'est la base de SQL :D Quand même !!! :p :p
|
|
mardi 17 avril 2007 à 17:02:27 |
Re : Utiliser une clause WHERE avant un INNER JOIN

FhX
|
"Qu'est-ce-qui dit là le monsieur ???"
Et pourquoi ca pourrait pas être une dame pour une fois ? Tu crois que ce sont des billes en SQL ? :o
Ouais si la plupart sont blondes.... ^^
|
|
mardi 17 avril 2007 à 17:03:41 |
Re : Utiliser une clause WHERE avant un INNER JOIN

J_G
|
Et ben merci chef !
|
|
jeudi 19 avril 2007 à 15:50:20 |
Re : Utiliser une clause WHERE avant un INNER JOIN

jean84
|
Ok merci pour vos conseils, je vais voir ce que je peut faire. Merci a vous deux 
|
|
Cette discussion est classée dans : id, admin, join, where, inner
Répondre à ce message
Sujets en rapport avec ce message
PHP : problèmes d'affichage en utilisant plusieurs requetes [ par vir76 ]
Voici mon problème :Je dispose de 3 requêtes :la première me permet de visualiser les dotations pour chaque sousdirection$rq="SELECT T_ANNEE.ANNEE_ANN
MySQL DELETE [ par Mamax ]
Salut a tous!!!Est ce que quelqu'un pourrait m'indiquer la syntax de la clause WHERE pour pouvoir supprimer plusieurs éléments en même temps.J'ai essa
problème de session php [ par oriviera ]
Bonjour,Voilà gros problme avec les sessions je sais ce n'est pas nouveau, mais je ne comprend rien car dans un cas de figure ca fonctionne très bien
Problème de suppression multiple (avec checkbox) [ par nougitch ]
Bonsoir, J'ai un souci avec ma selection multiple.Cela fonctionnait parfaitement et après quelques ajout dans mon code, je n'ai la possibilité de supp
Alors ce bug ?!?!? Rien capté ... [ par Tartuffe ]
Hello tous.. Je viens de tomber sur un truc Extra, et je ne trouve pas d'explication ! 1/ j'ai une table pays dont l'ID unique est R_O_ID 2/ j'ai une
problème de LEFT JOIN en MySQL5 [ par kiki2sirom ]
Bonjour à tous,J'ai un souci avec certaines de mes requêtes avec MySQL5 (chez moi)En MySQL4 je n'ai pas de problème (au bureau)Explication : 1) déj
Erreurs de compilation :Undefined offset [ par faty86 ]
Salut !! J'ai un code php et lors de la compilation j'ai 2erreurs que je n'arrive pas a trouver !Voici le resultat de la compilation :"partie supprime
Explication syntaxe where [ par bruno3591 ]
Bonsoir,Quelqu'un peut_il m'expliquer qu'elle est la signification de cette syntaxe : WHERE id='.$id.''je parle surtout des ' . " pourquoi a t'on beso
Requete avec ordre correspondant à la clause WHERE [ par yobogs ]
Bonjour,J'effectue la requete suivante :$query = "SELECT ID,TITRE,DATE FROM vdo WHERE ID='7239' OR ID='5301' OR ID='6750'";Lorsque j'affiche ces resul
Synthaxe des requetes avec valeur $_POST [ par vinz29 ]
Bonjour, Je débute en PHP, et je bloque sur l'affichage d'une requête depuis 2 jours... Voilà, j'effectue une requête vers une base MySQL à partir d'
Livres en rapport
|
Derniers Blogs
TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE)[HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE) par Gio
Je m'y prends un peu tard je sais, mais bon je suis développeur web et donc hyper fainéant ! Toujours dans le cadre des technologies émergentes, ici HTML5, parce qu'on aime HTML5 chez Wyg , nous seront présent, le vieux ( Aurélien V.) et moi, pour pr...
Cliquez pour lire la suite de l'article par Gio [WP7] DYNAMICALLY CHANGE STARTUP PAGE[WP7] DYNAMICALLY CHANGE STARTUP PAGE par KooKiz
Let's say that you want to allow the user to customize the startup page of your application. You can easily change the startup page by editing the 'NavigationPage' attribute in the manifest file. But the manifest cannot be modified once the applicatio...
Cliquez pour lire la suite de l'article par KooKiz SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|