IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Requête select analogue à INTERSECT (Oracle)


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 137
    Points : 87
    Points
    87
    Par défaut Requête select analogue à INTERSECT (Oracle)
    Bonjour,

    J'ai besoin d'aide pour rédiger une requête select qui aurais pu s'écrire grâce à la fonction INTERSECT (Oracle) :

    J'ai une table PAGE_MOT avec deux colonnes : ID_PAGE et DES_MOT, la colonne DES_MOT contenant un seul mot.

    La requête est simple : je veux retourner toutes les pages liées à deux mots (j'ai besoin de la requête pour retrouver des pages jusqu'à 10 mots, mais commençont par deux !)

    J'aurais écrit, sous Oracle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select id_page from page_mot
    where des_mot = 'barette'
    intersect
    select id_page from page_mot
    where des_mot = 'mémoire'
    Mais comme on ne peut pas sous Mysql, j'ai essayé avec des exists... Mais sans succès.

    Merci de m'éclairer sur comment faire si vous avez une idée...

  2. #2
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Salut !

    pourquoi pas ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select id_page from page_mot
    where
       id_page IN (select id_page from page_mot where des_mot = 'mémoire')
       AND des_mot = 'barrette'
    maios il faut que ton serveur accepte les sous-requêtes, MySQL >= 4.1
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  3. #3
    Membre expert
    Avatar de TheLeadingEdge
    Inscrit en
    Mai 2005
    Messages
    1 199
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 1 199
    Points : 3 103
    Points
    3 103
    Par défaut
    Bonjour,

    variante sans sous-requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT pm1.id_page
    FROM page_mot pm1
    INNER JOIN page_mot pm2
    ON pm1.id_page = pm2.id_page
    WHERE pm1.des_mot = 'mémoire'
    AND pm2.des_mot = 'barette';

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 137
    Points : 87
    Points
    87
    Par défaut
    Merci, mais vos réponse ne fonctionnent pas !

    en écrivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    where des_mot = 'mémoire')
       AND des_mot = 'barrette'
    on cherche les champs des_mot dans lesquelles il y a 'mémoire' et barette', et non la liste des pages possédant un lien 'mémoire' et un lien 'barette'.
    Mais le "in" est la bonne méthode à utiliser.
    ça marche comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    select id_page from page_mot
    where des_mot = 'barette'
    and id_page in 
    (
    select id_page from page_mot
    where des_mot = 'mémoire'
    )
    Merci

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 137
    Points : 87
    Points
    87
    Par défaut
    ah si pardon, j'avais mal lu la réponse avec le "in" fonctionne bien, j'avais pas vu la parenthèse !!!
    Désolé, et merci encore

  6. #6
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Citation Envoyé par damjal
    ah si pardon, j'avais mal lu la réponse avec le "in" fonctionne bien, j'avais pas vu la parenthèse !!!
    Désolé, et merci encore
    et si tu lis bien la solution proposée par TheLeadingEdge tu veras que son raisonnement et tout à fait correct et que sa requête fonctionne également...

    le test ne se fait pas sur la même colonne du fait de la jointure et des alias de table (pm1 & pm2)
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 137
    Points : 87
    Points
    87
    Par défaut
    oui, en effet, milles exscuses.

    La requête avec les inner join est d'ailleurs plus intéressante car son temps d'exécution est plus rapide puisque mysql peut alors utiliser les index de la table page_mot.

    Merci encore

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Résultat commençant par un chiffre avec requête SELECT
    Par nicolas.pissard dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/04/2010, 13h31
  2. Problème requête SELECT ORACLE
    Par vizlebiz dans le forum Langage SQL
    Réponses: 4
    Dernier message: 28/02/2008, 16h20
  3. Insertion multiple à base de sous requête SELECT
    Par drinkmilk dans le forum Langage SQL
    Réponses: 8
    Dernier message: 14/04/2005, 16h34
  4. SQL Server 7.0 - Requête Select
    Par sangokus dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 23/03/2004, 10h32
  5. Optimisations mysql sur les requêtes SELECT: index
    Par leo'z dans le forum Débuter
    Réponses: 2
    Dernier message: 29/11/2003, 13h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo