|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Invité régulier
![]() |
bonjour à tous
J'ai un problème de requête entre deux tables. j'ai une table avec des prénoms : T_prenoms conetnant id et prenom et une autre avec des produits : T_produits contenant id, nom Je souhaite récupérer tous les produits dont le nom est composé d'au moins un prénom. Ex : le parfum 'jack truc chose' me sera retourné car jack fait partie de la table T_prenom. Mais voila que je bloque sur la requête à employer. J'ai essayé : Code :
Code :
Merci Couss |
||||
|
|
00
|
|
|
#2 | ||
![]() ![]() |
En SQL, les valeurs textuelles s'écrivent entre apostrophes, pas entre guillemets, et l'opérateur normalisé de concaténation de chaînes de caractères est la double barre verticale.
Et tant qu'on y est, la syntaxe normalisée depuis 1998 pour les jointures utilise l'opérateur JOIN. Essaie comme ça : Code :
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
||
|
00
|
|
|
#3 |
|
Invité régulier
![]() |
Je suis sur mysql
Merci pour tes indications mais cela ne répond pas complétement à mon problème En effet le nombre de résultats est trop élevé j'ai T_prenoms * T_produits résultats alors que je souhaite juste avoir le max de l'une ou l'autre de mes tables |
|
|
00
|
|
|
#4 | ||||
![]() ![]() |
Vous pouvez essayer avec un EXISTS :
Code :
Code :
__________________
Email : http://scr.im/waldar |
||||
|
00
|
|
|
#5 |
|
Invité régulier
![]() |
Bonjour
Malheureusement le EXISTS me prend également les produits qui non aucun prénoms dans leur nom |
|
|
00
|
|
|
#6 | ||
![]() ![]() |
Citation:
Le MAX d'une table, ça n'existe pas ; MAX s'opère sur une colonne ou sur un calcul. Et tu n'avais pas parlé de ce besoin dans ton premier message. Citation:
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
||
|
00
|
|
|
#7 |
|
Invité régulier
![]() |
Effectivement je me suis mal expliqué
Je ne veux pas utiliser la fonction MAX() Mais ce que je souhaite obtenir c'est les produits avec au moins un prénom de la table T_prenoms en excluant ceux n'ayant aucun prénom. Ex : le parfum 'jack truc chose' me sera retourné car jack fait partie de la table T_prenoms. Mais le produit 'gateaux fourrés' n'apparaitra pas car il n'est composé d'aucun prénom. Donc au maximum la requête me retournera le nombre d'occurrences de la table T_produits, alors que la j'obtiens le nombre d'occurrence de la table T_prenoms * ceux de la table T_produits ai-je été plus clair ? |
|
|
00
|
|
|
#8 | ||
![]() ![]() |
C'est peut-être dû à MySQL qui je crois n'aime pas beaucoup l'opérateur de concaténation normalisé et qui préfère CONCAT; Essaie comme ça :
Code :
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
||
|
00
|
|
|
#9 | |||||
![]() ![]() |
Citation:
Données Code :
Code :
__________________
Email : http://scr.im/waldar |
|||||
|
00
|
|
|
#10 |
|
Invité régulier
![]() |
effectivement j'ai surement du faire une mauvaise manip.
En tout cas merci à vous deux Bonne journée |
|
|
00
|
|
|
#11 | ||
|
Membre expérimenté
![]() Inscription : octobre 2002 Messages : 654 ![]() |
Bonjour,
Pour la solution de Cinephil, je pense que ce qui ne convient pas àCouscouss sensei, c'est que les noms de produits apparaissent plusieurs fois. Inconvénient qui peut-être corrigé en rajoutant un distinct Code :
Je connaissais le + sous SQL server le || sous oracle, le & sous Access, mais je ne savais pas que || était normatif. Cordialement Soazig |
||
|
|
00
|
|
|
#12 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
hmmm
il me semble que la dernière fois que j'ai tenté d'utiliser || sous SQL Server, je me suis fait insulté par celui-ci... |
|
|
00
|
|
|
#13 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 950 ![]() |
Normal, car avant que la norme impose || pour la concaténation, l'opérateur | était utilisé par Sybase pour l'opération de OU exclusif !
Or SQL Server est à l'origine un produit Sybase.... A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
Copyright © 2000-2012 - www.developpez.com