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 :

Lorsque l'usage d UNION n'est pas possible [MySQL-5.6]


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 45
    Par défaut Lorsque l'usage d UNION n'est pas possible
    Bonjour.

    Je souhaite réaliser une recherche sur des enregistrements de type TEXT, dans deux tables, qui n'ont aucune dépendance entre elles, ni nom ou nombre de colonnes identique (d'où l'impossibilité d'un UNION).

    La finalité est d'obtenir l'affichage des enregistrements pouvant contenir une chaîne (SELECT LIKE%), avec d'autres données suivant la table concernée, par ordre chronologique de l'hodorate associé à chaque enregistrement, les deux tables confondues, eventuellement si possible une seule colonne pour l'horodate (possibilité d'utilisation de AS?).

    Pour simplifier,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    TABLE1
    idTABLE1  int AI PK
    donnee1 int
    texte TEXT
    horodate int (timestamp)
     
     
    TABLE2
    idTABLE2  int AI PK
    donnee2 int
    donnee3 int
    le_texte TEXT
    la_date int (timestamp)

    Résultat souhaité
    (avec bien sur, les champs non applicables suivant la table concernée par le résultats fixés à NULL,le post-traitement se chargera de la suite).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    donnee1, texte, heure_publication , donnee2, donne3, le_texte
    45   Blablabla  123456 NULL NULL NULL
    NULL NULL  1234567 45 -2 Alblbla
    NULL NULL  1234569 3  12 Blague


    Pouvez-vous m'indiquer si cela est possible, ce n'est pas très conventionnel, et si oui quelques pistes.

    D'avance, merci.

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonjour,

    Tu veux dire JOIN je suppose.
    Comment veux tu faire une jointure s'il n'y a pas de correspondance entre les tables? Ce n'est même pas logique.

    A+.

  3. #3
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 456
    Par défaut
    Bonjour,
    Il est tout à fait possible de faire une UNION de 2 requêtes, la seule condition étant que la liste des colonnes des deux requêtes soient compatibles ("même" type de donnée dans le même ordre).
    Dans ton cas, on peut faire ainsi:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select idTABLE1, donnee1,texte,horodate,null,null,null,null
    from table1
    union
    select null,null,null,la_date,idTABLE2,donnee2,donnee3,le_texte
    from table2

    Tatayo.

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 636
    Billets dans le blog
    10
    Par défaut
    bonjour

    Je rejoins la remarque de andry.aime, pourquoi vouloir mettre bout à bout des attributs issus de deux tables et que rien ne permet de mettre en correspondance ?
    A quoi cela pourra-t- il servir ?
    Pourquoi ne pas analyser tout simplement les deux contenus séparément ?
    Soit les tables sont mal conçues et un critère de jointure est manquant, soit il manque des explications

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 45
    Par défaut
    Sur le fait que cela ne correspond à aucune norme de conception, je l'ai indiqué dès mon premier message. Mon interrogation était savoir si malgré tout il y avait une possibilité d'exploiter les données dans un tel contexte.

    Ce sont deux tables qui contiennent du texte associé à une horodate.
    Le but est de faire une recherche sur le contenu du texte (façon moteur de recherche de texte), et afficher les textes susceptibles de correspondre à un pattern, les deux tables confondues, classé par horodate, qui sert de données de tri pour l'affichage (c'est la seule donnée commune quant à l'objectif de tri, un timestamp) ; sans altérer la structure et les données des tables initiales.
    Les autres données qui ne sont pas en commun sont des références nécessaires à extraire, mais sont spécifiques à chacune des tables.

    Si cela peut aider à concevoir une application d'un tel cas, on peut imaginer une table avec les articles d'un magazine X importés d'une source de données, une table avec les articles d'un magazine Y, tous horodatés, et chacun ayant des références spécifiques (numéro d'article du magazine, de page, ...) et faire une recherche sur un mot clef "vélo", et cela indiquerait pas ordre chronologique (données des deux tables confondues), tous les articles parlant de vélo, avec, si applicables, les données annexes associées, les non applicables à NULL.


    Quant à Union, je pensais à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT A.article, A.horodate FROM Table1 As A
    UNION
    SELECT B.article, B.horodate FROM Table2 as B

    ce qui est censé permettre la combinaison de deux résultats de requête Select là où la jointure n'est pas possible. , on peut y appliquer order BY... mais dans un tel cas, les select sont censés avoir le même nombre de colonnes, ce qui n'est pas mon cas quant aux données annexes.

    Le but était de faire réaliser à mysql le tri par horodate des données... et non faire des extractions séparées, et ensuite, en post traitement dans le logiciel qui les récupére, faire la fusion et le tri souhaité

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 636
    Billets dans le blog
    10
    Par défaut
    OK, mais
    - soit les horodatages sont strictement identiques dans les deux tables (très peu probable) auquel cas vous avez votre critère de jointure
    - soit ce n'est pas le cas et alors le rapprochement est impossible : vous pouvez avoir 3 articles sur un sujet dans le magazine M1 le même jour alors que le magazine M2 n'aborde ce sujet que 6 mois plus tard

    Quand à l'union, rien ne vous empêche d'ajouter une colonne fictive pour simuler deux tables identiques :

    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 col1
         , col2
         , cast('TOTO' as char(12)
         , col4
     
    from ma_table1
     
    union all
     
    select col1
         , col2
         , col3
         , col4
    from ma_table2

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

Discussions similaires

  1. Pourquoi il n'est pas possible d'hériter un constructeur ?
    Par VonDriguen dans le forum Général Java
    Réponses: 7
    Dernier message: 23/09/2010, 20h12
  2. Réponses: 9
    Dernier message: 04/02/2010, 18h45
  3. Réponses: 11
    Dernier message: 08/04/2009, 13h29
  4. Document imprimé - plus général que cela c'est pas possible
    Par pjmorce dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 10/01/2009, 23h29
  5. Sélection de texte à l'intérieur d'une cellule. C'est [PAS] possible.
    Par Blackfox dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 20/08/2007, 14h01

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