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 :

sous-select


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier

    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 66
    Points : 85
    Points
    85
    Par défaut sous-select
    Salut,

    je cherche à faire une requete de ce genre :
    ...avec mySql version 3.23.51 (donc sans sous-select)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT m.* FROM marque m
    where m.id not in (SELECT id_marque from produit WHERE x='O' )
    Sachant que ceci ne donne pas ce que je veux:
    (je peux avoir pour une marque un produit ayant X = 'O' et d'autres produits pour lesquels X <> 'O')

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT m.* from marque m
    LEFT OUTER JOIN produit p on produit.id_marque=m.id
    WHERE x <> 'O'
    OR p.id_marque is null
    Y'a-t-il une solution (à part passer à une version plus récente de MySql) ?

  2. #2
    Membre éprouvé
    Avatar de Biglo
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 537
    Points : 984
    Points
    984
    Par défaut
    Je ne suis pas très doué avec les JOIN, alors je vais peut-être dire une ânerie mais ça ne serait pas AND p.id_marque is null au lieu de OR ?

  3. #3
    Membre du Club
    Inscrit en
    Avril 2004
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 44
    Points : 47
    Points
    47
    Par défaut
    Effectivement, les sous-requêtes, c'est que pour MySQL 4.1 minimum.

    Essaie avec ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT marque.*
    FROM marque
    LEFT JOIN produit ON marque.id=produit.id_marque
    WHERE produit.id_marque IS NULL
    AND produit.x='O';

    PS: le OUTER ne change rien avec MySQL (histoire de compatibilité odbc...)

  4. #4
    Membre régulier

    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 66
    Points : 85
    Points
    85
    Par défaut
    Merci de votre aide,
    cependant, ca ne donne pas ce que je veux, ne serait-ce que parce qu'il peut y avoir des marques pour lesquelles il n'y a pas de produit associé

    La seule solution serait-elle d'utiliser une table temporaire ?

  5. #5
    Membre éprouvé
    Avatar de Biglo
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 537
    Points : 984
    Points
    984
    Par défaut
    J'ai été dans un cas similaire au tien il y a quelques jours. Et pour résoudre le problème, je suis aussi passé par une table temporaire

    Pour être franc, je suis content de bientôt pouvoir travailler avec MySQL 4.1 car certaines requêtes sont vraiment très lourdes avec les tables temporaires...

  6. #6
    Membre régulier

    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 66
    Points : 85
    Points
    85
    Par défaut
    ok
    c'est quoi la syntaxe exacte pour récupérer les données dans une table temporaire ?

  7. #7
    Membre éprouvé
    Avatar de Biglo
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 537
    Points : 984
    Points
    984
    Par défaut
    Tu peux regarder ce thread (surtout mes deux derniers posts).

  8. #8
    Membre régulier
    Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2003
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2003
    Messages : 94
    Points : 116
    Points
    116
    Par défaut
    Ca va le faire même en 4.0.x

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT marque.* 
    FROM marque 
    LEFT JOIN produit ON marque.id=produit.id_marque AND produit.x='O'
    WHERE produit.id_marque IS NULL ;
    Selecta

  9. #9
    Membre régulier

    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 66
    Points : 85
    Points
    85
    Par défaut
    c'est parfait, merci


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

Discussions similaires

  1. Div passant sous SELECT
    Par masseur dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 06/03/2008, 12h57
  2. Sous select et count(*)
    Par JPDOM dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 15/11/2007, 19h04
  3. Réponses: 2
    Dernier message: 19/06/2006, 12h47
  4. [C#][.net2] Sous select et jointure ne passe pas
    Par VincenzoR dans le forum Windows Forms
    Réponses: 25
    Dernier message: 19/01/2006, 12h48
  5. [firebird] sous select dans un select
    Par gdido dans le forum SQL
    Réponses: 2
    Dernier message: 14/05/2004, 10h57

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