Requête utilisant un CONCAT dans le from

infkb Messages postés 46 Date d'inscription mercredi 10 août 2005 Statut Membre Dernière intervention 18 janvier 2011 - 16 janv. 2011 à 13:24
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

2 réponses

aieeeuuuuu Messages postés 698 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 20 mai 2011 3
18 janv. 2011 à 09:55
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 ?
0
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
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
0
Rejoignez-nous