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 :

"Bizareries" SQL


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 6
    Par défaut "Bizareries" SQL
    voila, je ne comprends pas, j'ai une requete A qui retourne un resultat A.

    Dans le from de cette requete A, je crée deux nouvelles tables qui sont le resultat de select... from ...where....
    Je n'appelle pas ces deux tables dans le where de la requete A.


    J execute la requete A, et là, j'ai un resultat different que resultat A!
    comment se fait ce ?

  2. #2
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Par défaut
    oula!!
    met ta requête sa sera plus simple

  3. #3
    BiM
    BiM est déconnecté
    Expert confirmé
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Par défaut
    La bizzarerie SQL... Non c'est ta formulation qui est bizzare.

    En essayant de comprendre je suppose que tu fais :

    SELECT A.* FROM A;
    et
    SELECT A.* FROM A,B,C;

    Et tu n'as pas le même résultat, c'est bien ça ?

    Et bien c'est normal, il y a une jointure automatique, qui te donne autant de lignes que NbLignesDeA*NbLignesDeB*NbLignesDeC, sympa hein ?

    Attention c'est exponentiel !

  4. #4
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 6
    Par défaut
    oui, tu supposes bien, Ok, et pourquoi il fait cà?
    Le probleme, même quand je fais :

    select A.id
    from
    A,B,C
    where
    A. = B.
    and A. = C.
    and ...etc

    Il continue à me mettre toutes ces lignes identiques en trop.
    Je fais un distinct, et là il plante parce que c'est trop lourd.
    Je ne peux pas envoyer la rq, elle est trop grosse, je vais essayer de me débrouiller autrement,c'est pas grave.

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Par défaut
    Bonjour,
    Ok, et pourquoi il fait cà?
    Probablement parce que tu as oublié une jointure, un where A.quelquechose=B.autrechose, ou que tu t'es trompé dans l'expression d'une jointure, par exemple tu as écrit A.quelquechose =A.quelquechose ce qui est toujours vrai. Cela m'est déjà arrivé, donc cela peut t'arriver aussi.

    a+
    Soazig

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 010
    Billets dans le blog
    6
    Par défaut
    par défaut :
    fait le produit cartésien des tables A, B et C, c'est à dire qu'a chaque ligne de A il associe une ligne de B et à chaque ligne de AB il associe une ligne C. Si A contient 3 lignes, B 5 et C 7, le résultat comportera 105 lignes : 3 * 5 * 7.

    Cela s'apelle aussi un CROSS JOIN ou jointure croisée.
    A lire sur les jointures et comment éviter ce genre de bétises :
    http://sqlpro.developpez.com/cours/s...ointures/#L1.2

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  7. #7
    BiM
    BiM est déconnecté
    Expert confirmé
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Par défaut
    SQLpro, c'est ce que j'avais expliqué

Discussions similaires

  1. [Pentaho PDI] Echapper les quotes pour insertion SQL
    Par arno974 dans le forum kettle/PDI
    Réponses: 4
    Dernier message: 19/04/2010, 16h22
  2. [Tableaux] quotes dans requete sql
    Par taki_38 dans le forum Langage
    Réponses: 5
    Dernier message: 11/07/2006, 15h09

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