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

PostgreSQL Discussion :

Aide pour faire un produit cartésien


Sujet :

PostgreSQL

  1. #1
    Membre éclairé

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2011
    Messages
    371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 371
    Par défaut Aide pour faire un produit cartésien
    Bonjour,

    Ce n'est que ma 3ème requête SQL. Je ne suis pas très bon. Cependant, j'ai besoin d'aide.
    J'ai trois tables:

    une sous_compte , une asso_code_bud_sc, une Code_Bud

    La table asso_code_bud_sc permet de lier les sous-comptes aux codes budgétaires.
    Comment récupérer la liste du produit cartésien code budgétaire - sous-compte ?
    Sachant que je la veux sous la forme :

    code; intitule_code ; num_cpte

    Pour comprendre, regardez le fichier excel avec la structure des tables et les exemples de données.
    J'ai pas trouvé de moyen plus facile pour vous donner le plus d'info possible que de joindre un fichier => tables.ods.

    Pour l'instant, voici ce que j'ai écrit. Ne me criez pas dessus, je rappelle que je débute.
    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 code, intitule_code, num_cpte FROM base.code_budgetaire, base.sous_compte, base.asso_code_bud_sc where
    code IN (SELECT code FROM base.code_budgetaire WHERE base.code_budgetaire.id_code = base.asso_code_bud_sc.id_code IN (SELECT id_code WHERE base.asso_code_bud_sc.id_plan = 4 AND
    base.asso_code_bud_sc.id_plan = 5 AND
    base.asso_code_bud_sc.id_plan = 6 AND
    base.asso_code_bud_sc.id_plan = 7 AND
    base.asso_code_bud_sc.id_plan = 13 AND
    base.asso_code_bud_sc.id_plan = 14)) AND
    intitule_code IN (SELECT code FROM base.code_budgetaire WHERE base.code_budgetaire.id_code = base.asso_code_bud_sc.id_code IN (SELECT id_code WHERE base.asso_code_bud_sc.id_plan = 4 AND
    base.asso_code_bud_sc.id_plan = 5 AND
    base.asso_code_bud_sc.id_plan = 6 AND
    base.asso_code_bud_sc.id_plan = 7 AND
    base.asso_code_bud_sc.id_plan = 13 AND
    base.asso_code_bud_sc.id_plan = 14)) AND
    num_cpte IN (SELECT num_cpte FROM base.sous_compte WHERE base.sous_compte.id_sous_compte = base.asso_code_bud_sc.no_compte);

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    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 134
    Par défaut
    Penses-tu qu'il existe une ligne dans ta table lorrainng.asso_code_bud_sc dont la colonne id_plan possède simultanément les valeurs 4, 5, 6, 7, 13 et 14 ?
    Peut-être as-tu plus de chances de trouver plusieurs lignes dont la colonne id_plan présente l'une de ces valeurs.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre éclairé

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2011
    Messages
    371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 371
    Par défaut
    Désolé,

    Erreur de ma part, dans le fichier calc, je n'ai mis que des exemples. Dans la réalité, je veux faire un produit cartésien (code; intitule_code ; num_cpte) de tous les plans comptables sélectionnés.
    En fait, ce sont les mêmes plans, mais pour des raisons pratiques, nous avons dû les subdiviser. Par rapport au fichier que je vous ai donné, cela donnera :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
            select code, intitule_code, num_cpte FROM base.code_budgetaire, base.sous_compte, base.asso_code_bud_sc where
            code IN (SELECT code FROM base.code_budgetaire WHERE base.code_budgetaire.id_code = base.asso_code_bud_sc.id_code IN (SELECT id_code WHERE base.asso_code_bud_sc.id_plan = 1 AND
            base.asso_code_bud_sc.id_plan = 2 AND
            base.asso_code_bud_sc.id_plan = 3)) AND
            intitule_code IN (SELECT code FROM base.code_budgetaire WHERE base.code_budgetaire.id_code = base.asso_code_bud_sc.id_code IN (SELECT id_code WHERE base.asso_code_bud_sc.id_plan = 1 AND
            base.asso_code_bud_sc.id_plan = 2 AND
            base.asso_code_bud_sc.id_plan = 3)) AND
            num_cpte IN (SELECT num_cpte FROM base.sous_compte WHERE base.sous_compte.id_sous_compte = base.asso_code_bud_sc.no_compte);

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    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 134
    Par défaut
    Au risque de me répéter, tu ne trouveras aucune ligne de la table base.asso_code_bud_sc pour laquelle la colonne id_plan sera égale en même temps à 1, 2 et 3. Sans doute l'une ou l'autre de ces valeurs, mais pas plusieurs à la fois.
    Ensuite, ta requêtes sera plus lisible si tu attribues un alias à chaque table et tu précises pour chaque colonne à quelle table elle appartient.
    Alors, on pourra se pencher sur son contenu et essayer de la rendre efficace.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 997
    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 : 21 997
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par vandman;8082788
    [CODE
    SELECT ...
    WHERE base.asso_code_bud_sc.id_plan = 1
    AND base.asso_code_bud_sc.id_plan = 2 ...;[/CODE]
    Votre requête reste toujours et encore d'une haute stupidité !

    Comment voulez-vous avec une seule et même voiture aller en avant et en arrière ? C'est exactement ce que vous demandez à votre SGBD !
    http://www.specialist-auto.fr/wp-con...-1-720x320.jpg

    Commencez par comprendre ce que vous voulez faire !

    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/ * * * * *

Discussions similaires

  1. Réponses: 42
    Dernier message: 11/03/2007, 14h09
  2. demande d'aide pour faire un requete sql
    Par carmen256 dans le forum Requêtes
    Réponses: 3
    Dernier message: 14/04/2006, 09h50
  3. [VBA-E]besoin d'aide pour faire une boucle
    Par mikazounette dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/04/2006, 14h04
  4. [XSLT] aide pour faire un tableau HTML avec fusion de lignes
    Par utwor dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 02/01/2006, 21h41
  5. Besoin d'aide pour faire un script
    Par shinux2004 dans le forum Langage
    Réponses: 4
    Dernier message: 16/07/2005, 16h44

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