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

Bases de données Delphi Discussion :

MySQL WHERE imbriqués


Sujet :

Bases de données Delphi

  1. #1
    Membre habitué
    Homme Profil pro
    Owner
    Inscrit en
    Décembre 2004
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 466
    Points : 137
    Points
    137
    Par défaut MySQL WHERE imbriqués
    Bonjour,
    je sèche sur la syntaxe de WHERE imbriqués dans une requête Delphi
    Je dois mettre un champ 'Flag' à '-2SD' dans la table QC_Res_Temp
    quand la valeur du champ de cette même table est inférieure à la valeur MEAN de la table QC_Val
    de l'enregistrement dont le champ TEST est égal à PLT
    et le champ QCLot est égal à 40971102
    dont voici le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     Query2.Active:=False;
                   Query2.SQL.Clear;
                   Query2.SQL.Text:='UPDATE QC_Res_temp SET FLAG= '+quotedStr('-2SD') +
                   ' WHERE RESULT < '  +
                   ' SELECT (QC_VAl.MEAN' +
                   ' WHERE TEST = PLT'+
                   ' AND QCLOT = 40971102)';
                   Query2.ExecSQL();
    Qui a une idée???

    d'avance

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    encore une fois il manque des termes dans ton SQL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE QC_Res_temp SET FLAG= '+quotedStr('-2SD') 
                   ' WHERE RESULT < '  +
                   ' SELECT (QC_VAl.MEAN' +  // SELECT FROM QUOI ? 
                   ' WHERE TEST = PLT'+
                   ' AND QCLOT = 40971102)';
    A minima le SQL devrait être
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE QC_RES_TEMP SET FALG='-2SD' 
    WHERE RESULT< (SELECT MEAN FROM QC_VAL WHERE TEST='PLT' AND QC_LOT='40971102') // ça c'est pour récupérer MEAN , le WHERE se fait sur QC_VAL
    AND TEST='PLT' AND QCLOT='40971102'  // ça c'est sur la table QC_RES_TEMP
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Membre habitué
    Homme Profil pro
    Owner
    Inscrit en
    Décembre 2004
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 466
    Points : 137
    Points
    137
    Par défaut
    Salut Sergiomaster,
    même en vacances ;-)

    J'ai bien testé et celà ne plante plus maintenant avec ce code mais ne me retourne pas les bonnes valeurs (ne fait rien)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    for i:=1 to Query.FieldByName('nombre').AsInteger do
            begin
                    Query.Active:=False;
                    Query.SQL.Clear;
                    Query.SQL.Add('SELECT Test, Result, QC_Lot, Flag FROM qc_res_temp LIMIT '+(intToStr(i))+',1');
                    Query.Active:=true;
                    testtemp:=Query.FieldByName('test').AsString;
                    QC_lottemp:=Query.FieldByName('QC_Lot').AsString ;
     
                   Query2.Active:=False;
                   Query2.SQL.Clear;
     
                    Query2.SQL.Text:='UPDATE QC_RES_TEMP' +
                    ' SET FLAG= '+quotedStr('-2SD') +
                    ' WHERE RESULT< (((SELECT MEAN FROM QC_VAL ' +
                    ' WHERE TEST=' +quotedStr(testtemp)+
                    ' AND QCLOT='+quotedStr(QC_lottemp)+ // ça c'est pour récupérer MEAN , le WHERE se fait sur QC_VAL
                    ' ) AND TEST=' +quotedStr(testtemp)+
                    ' AND QC_LOT='+quotedStr(QC_lottemp)+  // ça c'est sur la TABLE QC_RES_TEMP
     
                     ' )'+
                   ' -2*( SELECT `ETCALC` FROM `qc_val` '+
                   ' WHERE TEST= '+quotedStr(testtemp)+
                   ' AND QCLOT= '+quotedStr(QC_lottemp)+  // ça c'est pour récupérer MEAN , le WHERE se fait sur QC_VAL
                   ' ) AND TEST=' +quotedStr(testtemp)+
                    ' AND QC_LOT='+quotedStr(QC_lottemp)+  // ça c'est sur la TABLE QC_RES_TEMP
                    ')';
                    Query2.ExecSQL();
               end;
    J'ai donc testé cette requête en test direct dans MySQL, mais
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    UPDATE QC_RES_TEMP
    SET FLAG= '-2SD' 
    WHERE RESULT< ((SELECT MEAN FROM QC_VAL 
    WHERE TEST='PLT'
    AND QCLOT='40971102'
    ) AND TEST='PLT'
    AND QC_LOT='40971102'                  
    -2*( SELECT `ETCALC` FROM `qc_val` 
    WHERE TEST= 'PLT'
    AND QCLOT= '40971102'
    ) AND TEST='PLT'
    AND QC_LOT='40971102'
    )
    mais ne fonctionne pas non-plus alors qu'elle devrait

  4. #4
    Membre habitué
    Homme Profil pro
    Owner
    Inscrit en
    Décembre 2004
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 466
    Points : 137
    Points
    137
    Par défaut
    En fait ce
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    UPDATE QC_RES_TEMP
    SET FLAG='-2SD'
    WHERE RESULT < ((SELECT MEAN FROM QC_VAL 
    WHERE TEST='PLT'
    AND QCLOT='40971102'
    ) AND QC_RES_TEMP.TEST='PLT'
    AND QC_RES_TEMP.QC_LOT='40971102'
    )
    ne renvoie rien (mais pas d'erreur)
    et donc celui-ci non-plus :-(
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    UPDATE QC_RES_TEMP
    SET FLAG='-2SD'
    WHERE RESULT < (((SELECT MEAN FROM QC_VAL 
    WHERE TEST='PLT'
    AND QCLOT='40971102'
    ) AND QC_RES_TEMP.TEST='PLT'
    AND QC_RES_TEMP.QC_LOT='40971102')
    -2* ((SELECT `ETCALC` FROM `qc_val`
    WHERE TEST='PLT'
    AND QCLOT='40971102'
    ) AND QC_RES_TEMP.TEST='PLT'
    AND QC_RES_TEMP.QC_LOT='40971102'))
    ne renvoie rien
    par contre ce code (deux parenthèses en moins)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    UPDATE QC_RES_TEMP
    SET FLAG='-2SD'
    WHERE RESULT < (SELECT MEAN FROM QC_VAL 
    WHERE TEST='PLT'
    AND QCLOT='40971102'
    ) AND QC_RES_TEMP.TEST='PLT'
    AND QC_RES_TEMP.QC_LOT='40971102'
    mais incomplet fonctionne et me fait l'update correctement (vis à vis de la formule tronquée)
    ...comment ajouter la seconde partie??? à savoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    -2* ((SELECT `ETCALC` FROM `qc_val`
    WHERE TEST='PLT'
    AND QCLOT='40971102'
    ) AND QC_RES_TEMP.TEST='PLT'
    AND QC_RES_TEMP.QC_LOT='40971102'))
    mais après de nombreuses tentatives ce
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    UPDATE QC_RES_TEMP
    SET FLAG='-2SD'
    WHERE RESULT < (SELECT MEAN
    -2* ETCALC FROM QC_VAL
    WHERE TEST='PLT'
    AND QCLOT='40971102'
    ) AND QC_RES_TEMP.TEST='PLT'
    AND QC_RES_TEMP.QC_LOT='40971102'
    fonctionne
    et celui-ci (Delphi)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     for i:=1 to Query.FieldByName('nombre').AsInteger-1 do
            begin
                    Query.Active:=False;
                    Query.SQL.Clear;
                    Query.SQL.Add('SELECT Test, Result, QC_Lot, Flag FROM qc_res_temp LIMIT '+(intToStr(i))+',1');
                    Query.Active:=true;
                    testtemp:=Query.FieldByName('test').AsString;
                    QC_lottemp:=Query.FieldByName('QC_Lot').AsString ;
     
                    Query2.Active:=False;
                    Query2.SQL.Clear;
                    Query2.SQL.Text:='UPDATE QC_RES_TEMP' +
                    ' SET FLAG= '+quotedStr('-2SD') +
                    ' WHERE RESULT < (SELECT MEAN -2* ETCALC' +
                    ' FROM QC_VAL' +
                    ' WHERE TEST=' +quotedStr(testtemp)+
                    ' AND QCLOT='+quotedStr(QC_lottemp)+
                    ' ) AND QC_RES_TEMP.TEST=' +quotedStr(testtemp)+
                    ' AND QC_RES_TEMP.QC_LOT='+quotedStr(QC_lottemp);
                    Query2.ExecSQL();
               end;
    aussi

    SergioMaster pour tes suggestions !

  5. #5
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par PhilLU
    SergioMaster pour tes suggestions !
    Tu ne t'es pour autant résolu à passer le message comme tel, ce que je viens de faire
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par PhilLU Voir le message
    même en vacances ;-)
    oui , ça me repose de la chasse sous-marine ! Donc une fois par jour je viens faire un tour
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

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

Discussions similaires

  1. WHERE imbriqués dans Delphi
    Par PhilLU dans le forum Requêtes
    Réponses: 2
    Dernier message: 04/08/2014, 10h39
  2. MySQL Update imbriqués
    Par PhilLU dans le forum Bases de données
    Réponses: 9
    Dernier message: 29/07/2014, 14h35
  3. [MySQL-5.6] Les SELECT et WHERE imbriqués
    Par emykev22 dans le forum Requêtes
    Réponses: 13
    Dernier message: 10/06/2014, 14h57
  4. Date Mysql Where
    Par menakikou dans le forum Requêtes
    Réponses: 1
    Dernier message: 22/09/2009, 17h06
  5. [MySQL] INNER & OUTER JOIN imbriqués avec WHERE
    Par kelson dans le forum Langage SQL
    Réponses: 1
    Dernier message: 28/02/2006, 12h00

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