infkb
Messages postés46Date d'inscriptionmercredi 10 août 2005StatutMembreDernière intervention18 janvier 2011
-
16 janv. 2011 à 13:24
infkb
Messages postés46Date d'inscriptionmercredi 10 août 2005StatutMembreDernière intervention18 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;
aieeeuuuuu
Messages postés698Date d'inscriptionjeudi 16 janvier 2003StatutMembreDernière intervention20 mai 20113 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.
infkb
Messages postés46Date d'inscriptionmercredi 10 août 2005StatutMembreDernière intervention18 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