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 :

LEFT JOIN possible avec ODBC de texte ?


Sujet :

Langage SQL

  1. #1
    Membre actif Avatar de surcouf1
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : Allemagne

    Informations forums :
    Inscription : Octobre 2008
    Messages : 126
    Points : 227
    Points
    227
    Par défaut LEFT JOIN possible avec ODBC de texte ?
    Bonjour,

    j'ai besoin de faire des requêtes SQL sur plusieurs fichiers textes, et je ne sais pas quelle commande SQL est supportée, et quelle commande SQL ne l'est pas.

    Par exemple, la requête suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT plusieurs champs de mes deux tabless
    FROM A
    LEFT JOIN B
    ON A.toto = B.toto AND A.titi=B.titi
    est-elle possible lorsqu'elle passe par un connecteur ODBC de texte (Microsoft windows) ?

    Merci d'avance,

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Du SQL sur un fichier texte ? Ça existe ça ?

  3. #3
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    non, pas possible.
    Ce n'est pas le pilote ODBC qui joue les commandes, mais il ne fait que les valider.
    Désolé mon cher ami.

  4. #4
    Membre actif Avatar de surcouf1
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : Allemagne

    Informations forums :
    Inscription : Octobre 2008
    Messages : 126
    Points : 227
    Points
    227
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Du SQL sur un fichier texte ? Ça existe ça ?
    Oui. C'est possible.
    Dans mon cas, il s'agit d'un fichier texte à largeur fixe, dont la structure est définie dans un fichier schema.ini situé dans le même dossier que le fichier texte.

    pour info, le fichier schema.ini contient le "code" suivant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    [MonFichiertexte.txt]
    ColNameHeader=False
    Format=FixedLength
    MaxScanRows=25
    CharacterSet=65001
    Col1=A Char Width 10
    Col2=B Char Width 50
    Col3=Mois Char Width 6
    Col4=Valeur Float Width 20
    et ainsi de suite, pour chaque fichier texte sur lequel on veut définir des requêtes SQL.

  5. #5
    Membre actif Avatar de surcouf1
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : Allemagne

    Informations forums :
    Inscription : Octobre 2008
    Messages : 126
    Points : 227
    Points
    227
    Par défaut
    Citation Envoyé par WOLO Laurent Voir le message
    non, pas possible.
    Bonjour,

    pouvez-vous préciser ce qui n'est pas possible ?
    Est-ce le principe de faire une requête SQL sur fichier texte
    ou bien est-ce l'utilisation de la commande LEFT JOIN via ODBC de type txt/csv ?

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Quel logiciel va exécuter la requête sur le(s) fichier(s) texte ?

  7. #7
    Membre actif Avatar de surcouf1
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : Allemagne

    Informations forums :
    Inscription : Octobre 2008
    Messages : 126
    Points : 227
    Points
    227
    Par défaut
    Bonjour,

    je m'apercois que je ne vous avais jamais répondu....

    Citation Envoyé par CinePhil Voir le message
    Quel logiciel va exécuter la requête sur le(s) fichier(s) texte ?
    Il s'agit d'un logiciel décisionnel (Board MIT en l'occurrence), qui via ODBC se connecte aux sources de données (relationelles, fichiers texte... tout ce qui est gérable via ODBC).

    Dans l'interface ETL de ce logiciel Board, les différents fichiers texte sont vus comme des tables (fichiers texte individuels) d'une base de données (le répertoire contenant les fichiers), dont les colonnes sont définies dans le fichier schema.ini, fichier par fichier, Cf l'exemple de mon post 03/02/2011 14h33

  8. #8
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Toujours sur le même problème 2 ans, 2 mois et 19 jours après ?

    Si ce n'est pas je pense que puisque le logiciel semble permettre de faire du SQL sur un fichier texte en le considérant comme une table grâce au format défini par le schéma, je ne vois pas pourquoi on ne pourrait pas faire un LEFT JOIN entre deux fichiers texte ainsi !

  9. #9
    Membre actif Avatar de surcouf1
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : Allemagne

    Informations forums :
    Inscription : Octobre 2008
    Messages : 126
    Points : 227
    Points
    227
    Par défaut
    Oui, toujours...
    Enfin j'ai mis en place des solutions de contournement, par définition plus lourdes et moins élégantes.

    Citation Envoyé par CinePhil Voir le message
    puisque le logiciel semble permettre de faire du SQL sur un fichier texte en le considérant comme une table grâce au format défini par le schéma, je ne vois pas pourquoi on ne pourrait pas faire un LEFT JOIN entre deux fichiers texte ainsi !
    Chaque SGBD a ses propres commandes et limitations.
    le logiciel peut lire le fichier texte via ODBC, c'est pour cette raison que le logiciel lit le fichier texte comme s'il était une table relationnelle. Ensuite, les fichiers texte sont un "SGBD" dont le "langage SQL" ne semble pas inclure la commande LEFT JOIN.

    Le but de mon post est de savoir si je me trompe, et si certains ont une idée magique pour appliquer des LEFT JOIN dans une requête sur plusieurs fichiers textes

  10. #10
    Membre chevronné
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Points : 1 806
    Points
    1 806
    Par défaut
    À tout hasard, puisque le post ne le précise pas, est-ce que l'écriture sous la forme ancienne est acceptée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT plusieurs champs de mes deux tabless
    FROM A, B
    WHERE A.toto = B.toto (+)
    AND A.titi=B.titi (+)
    ?

  11. #11
    Membre actif Avatar de surcouf1
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : Allemagne

    Informations forums :
    Inscription : Octobre 2008
    Messages : 126
    Points : 227
    Points
    227
    Par défaut
    Citation Envoyé par Rei Ichido Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    WHERE A.toto = B.toto (+)
    AND A.titi=B.titi (+)
    ?
    là je suis très ignorant. Que signifie ce (+) ?
    Est-ce l'équivalent d'un LEFT JOIN ? d'un autre style de jointure? ou est-ce complètement autre chose ?

  12. #12
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 099
    Points : 28 392
    Points
    28 392
    Par défaut
    Citation Envoyé par Rei Ichido Voir le message
    est-ce que l'écriture sous la forme ancienne est acceptée :
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE A.toto = B.toto (+)
    ?
    Il ne s'agit pas d'une forme ancienne mais de la manière dont Oracle mettait en oeuvre les jointures externes avant de finir par accepter de se conformer à la norme.

  13. #13
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Vous pouvez tenter de faire un UNION ALL entre une jointure interne et les lignes de la table de gauche pour lesquels il n'y a pas de ligne dans la table de droite pour satisfaire la condition de jointure :

    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
     
    SELECT A.id, A.Nom, B.UneColonne, B.UneAutreColonne
    FROM     A
    INNER JOIN B
      ON  B.idA = A.id
     
    UNION ALL
     
    SELECT A.id, A.Nom, NULL, NULL
    FROM A
    WHERE NOT EXISTS(
        SELECT 1
        FROM B
        WHERE B.idA = A.id
    )

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

Discussions similaires

  1. Left join / limit avec condition
    Par AdSFR dans le forum Requêtes
    Réponses: 5
    Dernier message: 03/03/2010, 15h22
  2. requete avec left join et group by
    Par slc dans le forum Requêtes
    Réponses: 2
    Dernier message: 14/09/2004, 18h03
  3. Creer une requete avec des LEFT JOIN et des GRO
    Par donbuz dans le forum Langage SQL
    Réponses: 2
    Dernier message: 01/09/2004, 15h53
  4. LEFT JOIN avec Oracle 8i ne va pas... doit utiliser (+)
    Par loikiloik dans le forum Langage SQL
    Réponses: 10
    Dernier message: 21/04/2004, 16h38
  5. Export d'une vue avec LEFT JOIN
    Par schnourf dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 22/05/2003, 13h57

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