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 :

Imbriquer deux requetes SQL (Projet Gestion de parc informatique)


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club Avatar de fomy
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    96
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 96
    Points : 56
    Points
    56
    Par défaut Imbriquer deux requetes SQL (Projet Gestion de parc informatique)
    Bonsoir à tous,
    tout est dans le titre, j'ai deux requetes et je souhaites n'en faire plus qu'une
    si toutefois c'est possible ?
    La premiere requete Inv-mat_user:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT table_prin.Num_immo_ecran AS Objet
    FROM table_prin
    WHERE (((table_prin.UID)=[forms]![fsupp_user]![fUID]))
    UNION
    SELECT table_prin.Num_immo_impr AS Objet
    FROM table_prin
    WHERE (((table_prin.UID)=[forms]![fsupp_user]![fUID]))
    UNION SELECT table_prin.Num_immo_pc AS Objet
    FROM table_prin
    WHERE (((table_prin.UID)=[forms]![fsupp_user]![fUID]));
    La seconde requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE base_mat SET base_mat.etat = "En stock", base_mat.site = [formulaires]![f_sretour_mat]![cmbsite]
    WHERE (((base_mat.Num_immo) In (Select objet from [Inv-mat_user])));

  2. #2
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    l'imbrication est en soit simple, il faut remplacer le nom de la requete par le code sql de la requete entourée de parenthèses, mais pour le cas union cela pose prb, tu pourras surement trouver une solus à partir de cette discution.

    bonne continuation.

  3. #3
    Membre actif
    Inscrit en
    Mai 2006
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 179
    Points : 222
    Points
    222
    Par défaut
    Salut ,
    pourrait tu expliquer ? Tu veux mixer une requete union(select) et une requête Update ?

  4. #4
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE table1 AS t4 SET champ = "en stock"
    WHERE t4.id not in (select t3.id from (select * from (select t1.id from table2 t1) union (select t2.id from table3 t2)) t3);
    update avec une requete union qui marche.


  5. #5
    Membre du Club Avatar de fomy
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    96
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 96
    Points : 56
    Points
    56
    Par défaut
    Citation Envoyé par vodiem Voir le message
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE table1 AS t4 SET champ = "en stock"
    WHERE t4.id not in (select t3.id from (select * from (select t1.id from table2 t1) union (select t2.id from table3 t2)) t3);
    update avec une requete union qui marche.

    Bonjour et merci,
    Je reviens sur ce poste que je n'ai pu traiter avant...
    vodiem J’ai du mal à comprendre votre requête, et plus particulièrement sur la signification du t2 t3 etc...
    En fait la (les) requetes ne travaillent que sur deux tables, base_mat et table_prin
    Dans base_mat j'ai (entre autres) les champs suivants :

    Num_immo | état |

    dans table_prin j'ai (entre autres) les champs suivants :

    uid | Num_immo_pc | Num_immo_ecran | Num_immo_impr

    Ce qu'il faut savoir, les champs : Num_pc, Num_impr et Num_ecran de la table table_prin sont remplis à partir de Num_immo (de la table base_mat)
    la table base_mat contient l'ensemble du matériel et la table table_prin
    permet d'affecter un pc / impr / ecran a un utilisateur, le tout définissant "une position"

    Ce que je souhaites faire, dans un formulaire je sélectionne l'uid (en me basant sur la table table_prin) le but étant de supprimer une position utilisateur (pc + écran + imprimante) et donc d'une part de supprimer la ligne correspondante dans la table table_prin (ca je gere ) et d'autre part de réafecter le matériel au stock, pour ce faire, il faut que je puisse modifier l'état de l'enregistrement correspondant au materiel attribué à l'utilisateur.
    donc en cliquant sur un bouton, je souhaites changer l'etat du matériel attribué à l'utilisateur pour qu'il soit égal à "en stock"

    Je sais faire via une premiere requete qui me "transforme" la ou les lignes de matériel attribué à l'utilisateur puis une seconde requete qui se base sur la premiere va modifier le statut du matériel.

    A priori donc vodiem semble avoir une solution mais j'ai du mal à l'interpréter et donc a la retranscrire dans ma table
    D'avance encore une fois merci.

  6. #6
    Membre du Club Avatar de fomy
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    96
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 96
    Points : 56
    Points
    56
    Par défaut
    C'est bon, j'ai trouvé (enfin je crois)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE base_mat SET base_mat.etat = "en stock"
    WHERE (((base_mat.Num_immo) In (select objet from (select table_prin.num_immo_ecran as objet from table_prin where table_prin.uid =getguid())))) or (((base_mat.Num_immo) In (select objet from (select table_prin.num_immo_impr as objet from table_prin where table_prin.uid =getguid())))) or (((base_mat.Num_immo) In (select objet from (select table_prin.num_immo_pc as objet from table_prin where table_prin.uid =getguid()))));
    a priori c'est bon qu'en pensez vous ?

  7. #7
    Membre du Club Avatar de fomy
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    96
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 96
    Points : 56
    Points
    56
    Par défaut
    Pouvez vous me dire si mon or a le meme résultat que union ?(dans ce cas précis bien sur)

  8. #8
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    salut fomy,

    j'ai du mal à comprendre ton explication.

    mais d'après ta requete tu veux attribuer la valeur "en stock" à <état> si on trouve <Num_immo> de [base_mat] dans <num_immo_ecran>, <num_immo_impr>, <num_immo_pc> de [table_prin] (qui ont <uid>=getguid() : ca aussi je ne suis pas sur d'avoir bien compris).
    en soit si c'est bien cette idée, oui. cela évite l'union sur ces trois champs.
    mais il y a aussi d'autres possibilités avec la fonction dlookup() eventuellement aussi avec le prédicat exist voir simplement avec une sous requete.
    mais comme j'ai du mal à comprendre, je ne peux que te conseiller ses pistes similaires, mais en soit ta requete semble correcte et se substitue bien avec une solus avec union.

    bonne continuation.

  9. #9
    Membre du Club Avatar de fomy
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    96
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 96
    Points : 56
    Points
    56
    Par défaut
    oui c'est ca, tu as bien (tout) compris
    merci pour ton aide...
    le sujet est donc passé en résolu

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

Discussions similaires

  1. Left join sur requete (Projet Gestion de parc informatique)
    Par fomy dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 31/03/2008, 20h39
  2. Projet Gestion de parc informatique
    Par fomy dans le forum Modélisation
    Réponses: 21
    Dernier message: 06/03/2008, 09h10
  3. Réponses: 6
    Dernier message: 05/03/2008, 15h52
  4. Réponses: 1
    Dernier message: 24/02/2008, 11h08
  5. Réponses: 2
    Dernier message: 23/02/2008, 10h54

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