Requete SQL de merde!

QUELQU'UN PEUT-IL FAIRE PASSER CETTE PETITE REQUETE DE L'ETAT "JE MARCHE PAS ET JE FAIS CHIER"

A L'ETAT "JE MARCHE C'eST DE LA BALLE!"

select distinct num_act_centre from act_centre
where act_centre.num_act_centre=select num_act_centre from merc_act_centre where trimestre='1'
OR act_centre.num_act_centre=select num_act_centre from vac_act_centre where periode='noel' or periode='hiver'

Merci , c'esdt cool

23 réponses

Résumé de la discussion

Problème de requête SQL complexe impliquant des sous-requêtes sur trois tables et des conditions sur le trimestre et la période, avec des opérateurs AND, OR et IN. Plusieurs réponses proposent d'utiliser IN pour filtrer num_act_centre avec les sous-requêtes, ou d'encadrer les conditions avec des parenthèses afin de clarifier l'ordre logique. D'autres suggèrent de remplacer le OR par des IN séparément pour chaque sous-ensemble ou d'éviter les OR, et certains discutent des contraintes spécifiques à MySQL ou EasyPHP. En cas de syntaxe incorrecte près des sous-requêtes, le diagnostic porte souvent sur les parenthèses manquantes ou les niveaux de priorité mal gérés, avec une nuance pratique sur les performances.

Bobot (l’IA à votre service)
  1. J'ignore si ton probleme à été résolu
    je suis en train de potasser les bases de SQL

    SELECT Distinct MU.act_centre AS NU
    FROM act_centre AC, merc_act_centre MAC,vac_act_centre VAC
    WHERE AC.NU =MAC.NU
    AND MAC.trimestre='1'
    OR AC.NU=VAC.NU
    AND VAC.periode='noel'
    OR VAC.periode='hivers';

    si le probleme à été solutionné je serais interessé de savoir comment
    Cordialement
    G.David
    0
    1. Mdr le post datait de 2003..
      0
    2. no problemo j'en ai vu remonter de 2001
      0
    3. ah ok savais pas :)
      0
    4. @yyanndbon mais un bon rire vaut un bon steack
      bon 'app
      0
  2. Je crois que les dernières versions de MySQL acceptent les requêtes imbriquées.

    A verifier...
    0
    1. j'aurai mis ca :
      select distinct num_act_centre from act_centre
      where act_centre.num_act_centre IN
      (select distinct num_act_centre from merc_act_centre where trimestre='1')
      UNION act_centre.num_act_centre IN
      (select distinct num_act_centre from vac_act_centre where periode IN('noel','hiver' ))

      sauf q le pblm, c'est q MySQL est limité, pas de requetes imbriqués, pas de requetes possibles dans les from, donc on est trop emmerdé, désolé, je regarderai pdt les vac si on peut faire autrement. BYE
      0
      1. select distinct num_act_centre from act_centre
        where act_centre.num_act_centre in (select num_act_centre from merc_act_centre where trimestre='1' )
        0
        1. mon - msn messenger c de la merde ca marche pas merci sil vous plait au revoir a bientot
          0
          1. Contributeur
            Mouarf. On ne pourra pas te reprocher de ne pas avoir cherché avec des mots-clefs pertinents :).

            -= Fu Xuen =-
            0
        2. non pas du tout !

          moi c'est 1,60m pour 60kg. juste juste quoi !
          0
          1. ha Ha Ha! Mé non, j'aimais bien ce nom (cartman de South park), mais qd G voulu m'inscrire sur caramail y'a quelques années, c'etait deja pris! Mais moi je fais 1m72, 63 kg, alors C pas trop gros!

            Fat_Cartman,
            Parce que je le vaux bien... 
            0
            1. c'est vrai t'es vraiment fat ? hi ! hi !
              0
              1. Moi je suis de ton avis janvier, les sous requetes, ca marche pas sous MySQL!

                Fat_Cartman,
                Parce que je le vaux bien... 
                0
                1. salut

                  dis donc excuser moi un peu là
                  j'avoue que j'ai jamais essayé depuis que j l'avais lu quelque part dans un manuel sur mySql que l'un des limites de mySql c'est de pas accpeter les requêtes imbriquées.

                  alors j'voudrais savoir au juste si oui ou non mySql accepte d'ordinaire les requêtes du genre

                  SELECT *** FROM *** WHERE *** [IN,=,...] (SELECT .....) ?

                  SQL le fait mais mySql c'est pas SQL ou mySql !

                  Merci

                  janvier
                  0
                  1. essaye ca

                    select distinct num_act_centre from act_centre
                    where
                    act_centre.num_act_centre in ( select num_act_centre from merc_act_centre where trimestre='1'
                    OR act_centre.num_act_centre in (select num_act_centre from vac_act_centre where periode='noel' or periode='hiver'))

                    cordialement
                    0
                    1. Salut Ben,

                      Je connais pas MySql mais en SQL je remplacerais les "=" précedant tes sous-queries par des IN
                      et ca fera qqchose du genre :
                      "
                      select distinct num_act_centre from act_centre
                      where act_centre.num_act_centre IN
                      (select distinct num_act_centre from merc_act_centre where trimestre='1')
                      OR act_centre.num_act_centre IN
                      (select distinct num_act_centre from vac_act_centre where periode='noel' or periode='hiver' )
                      "

                      Mais j'aime pas bcp le OR non plus

                      ciao

                      dEUS
                      There's no success like failure
                      And failure's no success at all
                      0
                      1. Salut !

                        Je suis d'accord avec toi ! Et je pense (quasi sûr) que ça marche sous MySQL.

                        @+@tous

                        [ Méfiez-vous des filets dérivants de la vie... ]
                        0
                    2. ma version:
                      ma version:
                      select distinct num_act_centre from act_centre
                      where act_centre.num_act_centre=
                      (select distinct num_act_centre
                      from merc_act_centre
                      where trimestre='1')
                      OR act_centre.num_act_centre=(select distinct num_act_centre from vac_act_centre where periode='noel' or periode='hiver' )
                      0
                      1. j'hallucine vraiment

                        Ya rien moyen de faire avec cette merde meme pas une pauvre Union a la con !!

                        Ya rien a dire d'autre c'est de la derme mais grave
                        !!
                        bon je repart galerer pour trouver une autre sol
                        0
                        1. Contributeur
                          Quel est le message d'erreur ?

                          -= Fu Xuen =-
                          0
                        2. bonjour,
                          A mon avis, c'est pas normal car après un WHERE il y a toujours une expression boolienne.
                          A++
                          0
                        3. Contributeur
                          Certes, mais il me semble que c'est le cas dans l'union formulée ci-dessus.

                          -= Fu Xuen =-
                          0
                        4. @Fu Xuendésolé, je voulais répondre à ben
                          A++
                          0
                      2. Modérateur
                        Déjà, j'aime pas les 'or'. Pas du tout ;-)
                        C'est pas évident à manipuler.

                        Ensuite voir act_centre.num_act_centre= ( select num_act_centre...) j'aime pas trop non plus. Le select num_act_centre peut renvoyer plusieurs valeurs, mais le '=' attend 1 seule valeur. C'est pas logique.

                        J'aurais fait:

                        SELECT num_act_centre from merc_act_centre where trimestre='1'
                        UNION
                        SELECT num_act_centre from vac_act_centre where periode in ('noel','hiver')
                        0
                        1. Contributeur
                          je crois savoir!!

                          il faut que tu fasse:
                          select num_act_centre, trimestre from merc_act_centre where merc_act_centre.trimestre='1' )

                          ++
                          Maily
                          0
                          1. on peut mettre qqc=select >>> select etant un mot reservé ???
                            0
                            1. SELECT distinct num_act_centre from act_centre
                              WHERE act_centre.num_act_centre= ( select num_act_centre from merc_act_centre where trimestre='1' )
                              OR act_centre.num_act_centre= ( select num_act_centre from vac_act_centre where periode='noel' or periode='hiver' );

                              CA DEVRAIT MARCHER! avec AND c'est pareil et meme avec les parenthèse ca marche pas !!!

                              Toujours la meme erreur
                              =>Something is wrong in your syntax près de 'select num_act_centre from merc_act_centre where trimestre='1')
                              ' à la ligne 2
                              0
                              1. Contributeur
                                et bien mets des parenthèses, ça aide en général...
                                sinon, ça te mets quoi comme message d'erreur????

                                ++
                                Maily
                                0
                                • 1
                                • 2