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 et SQL. Discussion :

Problème avec un intersect


Sujet :

Requêtes et SQL.

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 191
    Points : 209
    Points
    209
    Par défaut Problème avec un intersect
    Bonjour,
    j'ai un problème avec la requete SQL suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    SELECT DISTINCT id_element
    FROM element
    WHERE id_element
    IN (
     
    SELECT element.id_element
    FROM li_vues, ville, element
    WHERE li_vues.id_cat =0
    AND li_vues.id_ville = ville.id_ville
    AND element.ville_element = ville.id_ville
    AND li_vues.id_vues =10
    )INTERSECT
    SELECT id_element
    FROM element
    WHERE id_element
    IN (
     
    SELECT element.id_element
    FROM li_vues, li_cat, categorie, element
    WHERE li_vues.id_ville =0
    AND li_vues.id_cat = categorie.id_categorie
    AND li_cat.id_element = element.id_element
    AND li_vues.id_vues =4
    )
    les deux parties de la requete fonctionnent mais lorsque je met le INTERSECT, mysql me revoit une erreur :
    #1064 - Erreur de syntaxe pr�s de 'INTERSECT
    SELECT id_element
    FROM element
    WHERE
    id_element
    ' � la ligne 14
    Merci d'avance,

  2. #2
    Membre confirmé Avatar de chrifo
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    444
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 444
    Points : 481
    Points
    481
    Par défaut
    Bonjour,
    L'opérateur INTERSECT n'est pas implémenté dans Access, et ce n'est pas un mal car il est hors norme SQL.
    Vous devriez vous en sortir avec quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SELECT distinct element.id_element 
    FROM li_vues, ville, element 
    WHERE li_vues.id_cat =0 
      AND li_vues.id_ville = ville.id_ville 
      AND element.ville_element = ville.id_ville 
      AND li_vues.id_vues =10 
      AND element.id_element in
        (SELECT element.id_element 
        FROM li_vues, li_cat, categorie, element 
        WHERE li_vues.id_ville =0 
          AND li_vues.id_cat = categorie.id_categorie 
          AND li_cat.id_element = element.id_element 
          AND li_vues.id_vues =4)
    Je penche, donc je suis

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 191
    Points : 209
    Points
    209
    Par défaut
    merci pour votre réponse,
    le problème est que le resultat obtenu par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT DISTINCT element.id_element 
    FROM li_vues, ville, element 
    WHERE li_vues.id_cat =0 
      AND li_vues.id_ville = ville.id_ville 
      AND element.ville_element = ville.id_ville 
      AND li_vues.id_vues =10 
      AND element.id_element IN
        (SELECT element.id_element 
        FROM li_vues, li_cat, categorie, element 
        WHERE li_vues.id_ville =0 
          AND li_vues.id_cat = categorie.id_categorie 
          AND li_cat.id_element = element.id_element 
          AND li_vues.id_vues =4)
    n'est pas exactement celui j'obtiendrais avec un INTERSECT...
    j'avais déjà essayer cette solution...

  4. #4
    Membre confirmé Avatar de chrifo
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    444
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 444
    Points : 481
    Points
    481
    Par défaut
    Quelle est la différence entre les 2 résultats ?
    Je penche, donc je suis

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 191
    Points : 209
    Points
    209
    Par défaut
    Celui avec l'intersect
    :

    pour la première requete de l'intersect :
    et
    11
    37
    39

    pour la deuxième :
    rien

    résultat de l'intersect :
    11
    37
    39

    et la requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT DISTINCT element.id_element 
    FROM li_vues, ville, element 
    WHERE li_vues.id_cat =0 
    AND li_vues.id_ville = ville.id_ville 
    AND element.ville_element = ville.id_ville 
    AND li_vues.id_vues =10 
    AND element.id_element 
    IN  (
    SELECT element.id_element
     FROM li_vues, li_cat, categorie, element 
    WHERE li_vues.id_ville =0 
    AND li_vues.id_cat = categorie.id_categorie 
    AND li_cat.id_element = element.id_element 
    AND li_vues.id_vues =4)
    aucun résultat

  6. #6
    Membre confirmé Avatar de chrifo
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    444
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 444
    Points : 481
    Points
    481
    Par défaut
    Dans ce cas ce n'est "INTERSECT" mais "UNION" que vous voulez :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SELECT element.id_element 
    FROM li_vues, ville, element 
    WHERE li_vues.id_cat =0 
      AND li_vues.id_ville = ville.id_ville 
      AND element.ville_element = ville.id_ville 
      AND li_vues.id_vues =10 
      AND element.id_element 
    UNION SELECT element.id_element 
    FROM li_vues, li_cat, categorie, element 
    WHERE li_vues.id_ville =0 
      AND li_vues.id_cat = categorie.id_categorie 
      AND li_cat.id_element = element.id_element 
      AND li_vues.id_vues =4
    Je penche, donc je suis

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 191
    Points : 209
    Points
    209
    Par défaut
    merci,
    ça marche...

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

Discussions similaires

  1. Problèmes avec INTERSECT sur MYSQL
    Par zarbydigital dans le forum Requêtes
    Réponses: 1
    Dernier message: 27/09/2005, 13h18
  2. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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