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 et SQL. Discussion :

Message Cette sous requête peut retourner au plus un enregistrement


Sujet :

Requêtes et SQL.

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Message Cette sous requête peut retourner au plus un enregistrement
    Bonjour,

    J'ai une base avec entre autre 2 tables : temparticle (avec les champs article, fonction) et tempSG (avec le champ code), j'ai fait la requête ci-dessous pour sélectionner les champs des 2 tables, lorsque la table SG est vide (ce qui peut arriver dans ma base) ou contient 1 ligne de données, ça fonctionne, mais lorsque la table SG contient plusieurs lignes de données, la requête ne fonctionne plus et m'affiche le message "Cette sous requête peut retourner au plus un enregistrement"

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT article, fonction, iif((select count (*) from tempsg)=0,'', (select tempsg.code from tempSG)) AS SG
    FROM temparticle;

    Exemple de résultat qui fonctionne avec la table SG contenant 1 ligne de données :

    article fonction SG
    611 020 sport
    66111 020 sport

    Exemple de résultat qui fonctionne avec la table SG vide :

    article fonction SG
    611 020
    66111 020

    Exemple de résultat que je devrais obtenir mais qui ne fonctionne pas car la table SG contient plusieurs lignes de données :

    article fonction SG
    611 020 sport
    66111 020 sport
    611 020 bibli
    66111 020 bibli

    Pouvez-vous, svp, me dire ce qui ne va pas dans ma requête ?

    Merci pour votre aide.

  2. #2
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 087
    Points : 5 203
    Points
    5 203
    Par défaut
    Bonjour,

    SELECT ... FROM temparticle retourne autant de lignes que le contenu de la table, ni plus ni moins. Pour croiser 2 tables il faut les mettre toutes 2 dans le FROM :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT x.article, x.fonction, nz(y.code,'') AS SG FROM temparticle as x, tempSG as y
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonjour Nico84,

    Merci pour ta réponse, ça fonctionne bien quand la table tempSG contient des données, mais il me reste un problème, lorsque ma table tempSG est vide, je voudrai que la requête m'affiche quand même le résultat du select des 2 tables avec donc les colonnes article et fonction remplies et la colonne code vide comme ci-dessous :

    Nom : Image 1.jpg
Affichages : 200
Taille : 15,0 Ko

    alors que ta requête affiche le résultat suivant (quand la table tempSG est vide):

    Nom : Image 2.jpg
Affichages : 196
Taille : 9,7 Ko


    Enfin, si c'est faisable

  4. #4
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonjour,
    J'ai une base avec entre autre 2 tables : temparticle (avec les champs article, fonction) et tempSG (avec le champ code)
    personnellement, je vois un gros problème dans ton modèle de données: il n'y a aucun lien entre tes 2 tables. Donc, en associant des entités qui n'ont aucun rapport entre elles tu crées un cartésien produit de n par m (n et m: le nombre d'enregistrements de chaque table) ... et si n ou m est égal à 0 (comme quand la table tempSG est vide) cela ne fonctionnera pas.

    Est-ce que ces tables sont créées temporairement ?
    Explique-nous un peu le contexte d'utilisation de ces tables
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonjour tee_grandbois,

    En fait, à la base, j'ai une table Article et une table SG, ensuite j'ai 2 formulaires qui se suivent, le 1er concerne la table Article, avec une liste d'article que je peux cocher ou pas, une fois certains cochés, je fais Suivant qui m'ouvre un 2ème formulaire lié à la table SG, avec une liste de SG que je peux cocher ou pas, une fois certains cochés, je fais Exécuter pour avoir le résultat, je veux que ça me crée 1 ligne par article et par SG, et si ma table SG est vide, que ça me crée juste 1 ligne par article, les tables tempArticle et tempSG c'était juste pour isoler les sélections faites sur les formulaires mais si on peut faire sans c'est mieux.

    ex :
    dans Article j'ai 611 et 60612 comme données
    dans SG j'ai SPORT et BIBLI comme données

    je voudrais comme résultat (Avec table SG non vide) :

    611 SPORT
    611 BIBLI
    60612 SPORT
    60612 BIBLI

    je voudrais comme résultat (Avec table SG vide) :

    611
    60612

    mais avec la colonne SG affichée aussi mais vide.

    La requête ci-dessous fonctionne bien quand j'ai pas de données dans la table SG ou si j'ai qu'1 ligne de données mais à partir du moment ou j'ai 2 lignes de données ou plus dans SG, j'ai l'erreur "Cette sous requête peut retourner au plus un enregistrement"

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT article, fonction, iif((select count (*) from tempsg)=0,'', (select tempsg.code from tempSG)) AS SG
    FROM temparticle;

    Alors que la requête de Nico84 fonctionne très bien quand la table SG comporte des données mais ne fonctionne plus quand cette table est vide

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT x.article, x.fonction, nz(y.code,'') AS SG FROM temparticle as x, tempSG as y

    Je sais pas si je suis clair mais ce que je cherche à faire n'est peut-être pas possible ?

  6. #6
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 087
    Points : 5 203
    Points
    5 203
    Par défaut
    C'est clairement pas standard comme requête. Il faudrait faire un left join entre les tables mais comme il n'y a pas de clé commune... Peut-être ceci marcherait ?
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT x.article, x.fonction, nz(y.code,'') AS SG FROM temparticle as x left join tempSG as y on 1=1
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

Discussions similaires

  1. La sous-requête d’UPDATE retourne plus d’une valeur
    Par Reg333 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 21/07/2015, 15h34
  2. Sous-requête qui retourne les mêmes valeurs
    Par messi1987 dans le forum Développement
    Réponses: 5
    Dernier message: 23/09/2014, 19h22
  3. La sous-requête a retourné plusieurs valeurs.
    Par babilonman90 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 11/07/2013, 12h31
  4. Réponses: 4
    Dernier message: 07/07/2008, 15h29
  5. Cette sous-requete peut retourner au plus un enregistrement?
    Par zorba49 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 09/03/2006, 11h18

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