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 :

un SELECT qui retourne plus de ligne que la table


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Inscrit en
    Mai 2007
    Messages
    183
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 183
    Points : 121
    Points
    121
    Par défaut un SELECT qui retourne plus de ligne que la table
    J'ai un besoin très particulier (sur MYSQL5.0), que je vais essayer d'illustrer très simplement.

    Soit la table suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE TABLE `MULTAX` (
    `ELEMENT_A_MULTIPLIER` VARCHAR( 30 ) NOT NULL ,
    `MULTIPLICATEUR` INT NOT NULL 
    )
    Précisement, je souhaite que si la table contient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO `pb_crea`.`MULTAX` (`ELEMENT_A_MULTIPLIER` ,`MULTIPLICATEUR`)
    VALUES ('VACHE', '2'), ('COCHON', '5');
    Je souhaite que mon SELECT retourne :

    'VACHE' 1
    'VACHE' 2
    'COCHON' 1
    'COCHON' 2
    'COCHON' 3
    'COCHON' 4
    'COCHON' 5

    C'est un select qui me renvoie plus de ligne que la table n'en contient...

    Est-ce que c'est possible en SQL, ou dois-je me rabattre coté applicatif?

    Avis aux experts.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    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 080
    Points : 30 803
    Points
    30 803
    Par défaut
    SQL ne peut pas inventer d'informations qu'il ne possède pas.
    Donc, si tu veux une suite d'entiers, il te faut une table avec une suite d'entiers. Après, la multiplication se fait toute seule
    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 régulier
    Inscrit en
    Mai 2007
    Messages
    183
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 183
    Points : 121
    Points
    121
    Par défaut
    Si je suis puriste, il me faut donc une table contenant tous les entiers de 0 jusqu'à la valeur maximum de l'entier.
    J'ai pas trop envie de me faire une table avec 2 147 483 647 enregistrement.
    (même si je n'aurait jamais de ferme assez grande pour tous les bestiaux..)

    Ta réponse laisse entendre que c'est possible.. mais pas très propre si je veux avoir un résultat qui marche tout le temps...
    A moins que je borne coté applicatif le champs 'MULTIPLICATEUR'.

    Donc le choix de faire coté applicatif ou coté SQL est fonction de la valeur MAX du champs 'MULTIPLICATEUR'.

    Genre de 0 à 1000 pourquoi pas coté SQL, mais de 0 à 100 000 on peut se poser la question, et de 0 à 2 147 483 647 je fais forcément ça coté applicatif.

    J'ai bien compris chef ?

  4. #4
    Membre expérimenté
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Points : 1 717
    Points
    1 717
    Billets dans le blog
    6
    Par défaut best idea
    Salem()
    reste optimiste; il ne faut jamais se Désespérer. je pense que toute chose calculable est programmable.
    donc je vous propose une solution oracle sans modifier la structure de la table.
    j'attend votre reponse
    bon courage
    Zoheir BOUSSAFI
    d'avoir Pensé à voter positivement pour ceux qui vous ont aidés et surtout à mettre si le cas.
    ça encourage.

  5. #5
    Membre régulier
    Inscrit en
    Mai 2007
    Messages
    183
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 183
    Points : 121
    Points
    121
    Par défaut
    Toute solution compatible MYSQL5.0 m'interesse.

    Merci

    (en attendant un petit mot de al1_24 sur mon commentaire précédent).

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    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 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Citation Envoyé par gomodo Voir le message
    Si je suis puriste, il me faut donc une table contenant tous les entiers de 0 jusqu'à la valeur maximum de l'entier.
    J'ai pas trop envie de me faire une table avec 2 147 483 647 enregistrement.
    (même si je n'aurait jamais de ferme assez grande pour tous les bestiaux..)

    Ta réponse laisse entendre que c'est possible.. mais pas très propre si je veux avoir un résultat qui marche tout le temps...
    A moins que je borne coté applicatif le champs 'MULTIPLICATEUR'.

    Donc le choix de faire coté applicatif ou coté SQL est fonction de la valeur MAX du champs 'MULTIPLICATEUR'.

    Genre de 0 à 1000 pourquoi pas coté SQL, mais de 0 à 100 000 on peut se poser la question, et de 0 à 2 147 483 647 je fais forcément ça coté applicatif.
    La question étant posée sur le forum Langage SQL, j'ai donné une réponse en Langage SQL
    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.

  7. #7
    Membre régulier
    Inscrit en
    Mai 2007
    Messages
    183
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 183
    Points : 121
    Points
    121
    Par défaut
    Merci !

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

Discussions similaires

  1. Select qui retourne le premier enregistrement
    Par vladimire dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 28/05/2009, 13h47
  2. l'équivalent de CF mais qui retourne plus qu'une résultat
    Par monpseudonom dans le forum Reports
    Réponses: 6
    Dernier message: 21/05/2009, 16h34
  3. select qui retourne que le premier element
    Par sallemel dans le forum Hibernate
    Réponses: 6
    Dernier message: 12/12/2008, 17h40
  4. requète qui retourne la derniere ligne d'un ensemble de tuple
    Par Stouille33 dans le forum Développement
    Réponses: 4
    Dernier message: 14/11/2008, 09h15
  5. Faire un Select qui retourne dans un certain ordre
    Par Rodie dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 19/01/2007, 22h29

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