Requête utilisant un CONCAT dans le from

Messages postés
46
Date d'inscription
mercredi 10 août 2005
Statut
Membre
Dernière intervention
18 janvier 2011
- - Dernière réponse : infkb
Messages postés
46
Date d'inscription
mercredi 10 août 2005
Statut
Membre
Dernière intervention
18 janvier 2011
- 18 janv. 2011 à 11:40
Bonjour,

je veux faire une requête sur la table test_21 tel que 21 et un id qu'on récupère d'une autre requête SQL puis je le concatène avec la chaîne de caractère "test".
 SELECT champ1, champ2
  FROM 
    (
      SELECT CONCAT('test_',entriesid) 
      FROM tabletest
      WHERE name = 'kb' 
      AND id = 3125
      )AS tbl;
      


Ou bien

 
 SELECT tbl.champ1, tbl.champ2
  FROM 
    (
      SELECT CONCAT('test_',entriesid) 
      FROM tabletest
      WHERE name = 'kb' 
      AND id = 3125
      )AS tbl;    
   


Les 2 cas cela ne marche pas or ca marche uniquement pour les opérations count(*)

 SELECT max(tbl.nr)
  FROM 
    (
      SELECT CONCAT('test_',entriesid) , count(*) AS nr
      FROM tabletest
      WHERE name = 'kb' 
      AND id = 3125
      )AS tbl;


Merci d'avance pour votre aide
Afficher la suite 

2 réponses

Messages postés
698
Date d'inscription
jeudi 16 janvier 2003
Statut
Membre
Dernière intervention
20 mai 2011
2
0
Merci
Bonjour

Tu ne peux pas faire ainsi !
Lorsque tu fais une sous requete, c'est le resultat de cette sous requete qui est "vu" comme une table (pseudo table) par la requete englobante.

donc ta troisième requete doit te donner le max des count(*) de la sous requete.

Hors, dans tes deux première requêtes, les sous requêtes ne renvoient qu'une seule colonne, et la requete englobante en cherche deux.

tu devras créer la requete dynamiquement, puis de l'exécuter.

Cependant, il est anormal que tu ais à faire ce genre de choses, et je pense que tu as un gros problème de modélisation.

Qu'as tu comme tables et que contiennent-elles ?
Commenter la réponse de aieeeuuuuu
Messages postés
46
Date d'inscription
mercredi 10 août 2005
Statut
Membre
Dernière intervention
18 janvier 2011
0
Merci
Mercii aieeeuuuuu pour ta réponse mon souci exactement est que j'ai besoin de faire des curseurs dynamique utilisant cette requête :

 SELECT tbl.champ1, tbl.champ2 (A)
  FROM 
    (
      SELECT CONCAT('test_',entriesid) 
      FROM tabletest
      WHERE name = 'kb' 
      AND id = 3125
      )AS tbl;


Sachant que la sous requête génère comme résultat la chaine de caractère "test_15" qui est une table contenant les colonnes "champ1" et "champ2"

alors j'ai pu faire marché ma requête utilisant des variables ainsi:

select id into @val_id from tabletest where name='kb' and id=3125;

set @table_name := CONCAT('Test_' , @val_id);
select @table_name;
PREPARE rp FROM @table_name;
EXECUTE rp;


puis j'ai déclaré mon curseur :

DECLARE distinctCursor CURSOR for SELECT DISTINCT champ1, champ2 FROM @table_name;


et dans le corps je mets:

select id into @val_id from tabletest where name='kb' and id=3125;
set @table_name := CONCAT('Test_' , @val_id);


cela ne marche pas il me donne erreur dans la déclaration du curseur, pour cela je suis obligée de déclarer mon curseur utilisant la requête (A) la 1ere.

J'espère bien expliquer mon pb et merci pour tout aide d'avance
Commenter la réponse de infkb