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

Langage SQL Discussion :

Matcher exactement le contenu d'une liste


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2007
    Messages : 17
    Points : 11
    Points
    11
    Par défaut Matcher exactement le contenu d'une liste
    Bonjour,

    J'utilise MySQL 5.0.22.

    Afin d'expliquer clairment mon probleme, voici d'abord la structure des tables impliquees:

    Ownership : ID, ownershipData
    Ownership_RealEstate : Ownership_ID, RealEstate_ID
    RealEstate : ID, village, plot ( le numero de plot peut etre null )

    La table Ownership_RealEstate est une table d'association pour matcher la relation N-M qui existe entre Ownership et RealEstate.

    Le but de ma requete est de retrouver tous les ownerships qui sont exactement liés à une liste de RealEstate ( une liste de village.plot est passée en paramètre), ni plus ni moins.

    En gros je voudrais pouvoir demander quels sont les ownership qui ont comme realestate number 1.1, 2.1, 3

    Ce que je n'arrive pas à faire c'est le match exact de ma liste.


    Voici la dernière version de ma requête ( qui ne marche toujours pas ):
    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
     
    SELECT DISTINCT o.*
    FROM ownership AS o, ownership_realestate AS ore
    WHERE o.id = ore.ownerships_id
    AND ( 	SELECT count( * )
    		FROM ownership_realestate AS ore1, realestate AS re1
    		WHERE o.id = ore1.ownerships_id
    		AND ore1.realEstates_id = re1.id
    	) = 2
    AND ore.realEstates_id = 
    	ANY(
    		SELECT re.id
    		FROM realestate re
    		WHERE 
    		( concat( re.village, concat( '.', re.plot ) ) IN ( '1.1', '3') AND re.plot IS NOT NULL )
    		OR 
    		( re.village IN ( '1.1', '3' ) AND re.plot IS NULL )
    	)
    C'est très volontiers que j'accepterait de l'aide

    Merci d'avance

  2. #2
    Membre confirmé Avatar de TryExceptEnd
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 501
    Points : 576
    Points
    576
    Par défaut
    Je ne connais pas MySQL, mais en bon sql standard cela devrait marcher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT 
      OWNERSHIP.OWNERSHIPDATA
    FROM
      OWNERSHIP_REALESTATE
      INNER JOIN OWNERSHIP ON (OWNERSHIP_REALESTATE.ID_OWNERSHIP = OWNERSHIP.ID)
      INNER JOIN REALESTATE ON (OWNERSHIP_REALESTATE.ID_REALESTATE = REALESTATE.ID)
    WHERE
      (REALESTATE.NUMBER IN ('1.1','3'))

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2007
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Merci pour la réponse, ma requête est bien simplifiée.

    Malheureusement j'ai toujours un problème.

    La requête ne fonctionne pas dans ce cas de figure par exemple:

    Je cherche avec un seul realestate number ( ex 1.1 ).
    J'ai dans la base un ownership lié a 2 realestate ( 1.1 et 3 ).

    La requête me retourne le ownership precedemment decris, pourtant je ne voudrais pas qu'il fasse partie du resultat, il ne match pas exactement la liste fournie en parametre ( même si celle-ci ne contiens en effet qu'un seul élément ).

    Il semblerait qu'avec la requête proposée, les "sous-ensembles" soient acceptés, ce que je ne veux pas.

    Encore merci, je continue les recherches...

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2007
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    J'ai réussi !!

    Voilà finalement la requête que j'utilise:

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    SELECT *
    FROM ownership AS o
    WHERE o.id = (
    SELECT DISTINCT ownerships_id
    FROM ownership_realestate
    INNER JOIN ownership ON ( ownership_realestate.ownerships_id = ownership.id )
    INNER JOIN realestate ON ( ownership_realestate.realEstates_id = realestate.id )
    WHERE (
    (
    concat( realestate.village, concat( '.', concat( realestate.plot ) ) )
    IN (
    '1.1', '3'
    )
    AND realestate.plot IS NOT NULL )
    OR (
    realestate.village
    IN (
    '1.1', '3'
    )
    AND realestate.plot IS NULL
    )
    )
    GROUP BY ownership.id
    HAVING count( * ) =2
    )
    AND (
     
    SELECT DISTINCT count( * )
    FROM ownership_realestate AS ore
    INNER JOIN ownership ON ( ore.ownerships_id = ownership.id )
    INNER JOIN realestate ON ( ore.realEstates_id = realestate.id )
    WHERE ore.ownerships_id = o.id
    ) =2
    Ce n'est certainement pas la requête la plus élégante ( et si d'ailleurs quelqu'un sait comment la simplifié, si c'est possible, je suis preneur ) mais au moins elle a le merite de me retourner ce que je veux

    Encore merci pour l'aide !

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

Discussions similaires

  1. afficher les contenu d'une liste dynamiquement
    Par mzt.insat dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 06/04/2006, 18h02
  2. Contenu d'une liste déroulante
    Par tets88 dans le forum Access
    Réponses: 3
    Dernier message: 20/03/2006, 11h37
  3. [debutant] recupérer contenu d'une liste
    Par Silvia12 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 21/01/2006, 18h41
  4. [Upload] Modifier le contenu d'une liste box automatiquemen
    Par Phenomenium dans le forum Langage
    Réponses: 7
    Dernier message: 16/01/2006, 21h42
  5. contenu d'une liste deroulante
    Par djtoph dans le forum IHM
    Réponses: 11
    Dernier message: 13/06/2005, 16h53

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