Requete dans plusieurs tables [resolu]

Requete dans plusieurs tables [resolu] - SQL/NoSQL - Programmation

Marsh Posté le 02-06-2009 à 11:19:23    

Bonjour ,
 
j ai plusieurs tables (dont la strcuture est differentes) , et dont le nombre peut evoluer (en temps reel)
 
Le point commun de ces tables et de posseder un champ date,
J aimerais pouvoir lancer une requete qui me renvoie le min de toutes les dates.
 
Le probleme bloque des le debut ,  
 
select date from a,b;
ERROR 1052 (23000): Column 'date' in field list is ambiguous
 
, ensuite y a t il moyen d effectuer une recherche avec dans le from l'equivalent de "all tables"
 
 
Merci beaucoup


Message édité par _julien_ le 02-06-2009 à 16:19:20
Reply

Marsh Posté le 02-06-2009 à 11:19:23   

Reply

Marsh Posté le 02-06-2009 à 11:27:00    

select least(min(a.date,b.date) FROM a , b

 

et non, on peut pas faire de recherche sans tous les champs de toutes les tables sans les nommer explicitement

 

bonne recherche

 

edit : je suis curieux, est ce que tu peux m'expliquer quel est le besoin de créer des tables en temps réel ?


Message édité par flo850 le 02-06-2009 à 11:27:33

---------------

Reply

Marsh Posté le 02-06-2009 à 11:30:41    

l

Citation :

ensuite y a t il moyen d effectuer une recherche avec dans le from l'equivalent de "all tables"


 
non, il faut interroger le dictionnaire de donnée (propre a chaque sgbd, pour oracle je peux t'aider, pour le reste pas), et faire du sql dynamique pour interrober chaque table
 

Citation :

select date from a,b;


 
ce serait plus judicieux de faire des requete séparée, la il va s'amuser a faire le produit cartésien alors que ce n'est pas nécéssaire.

Reply

Marsh Posté le 02-06-2009 à 11:42:58    

En fait , la base de données est connectée avec un logiciel , qui construit de nouvelles tables a chaque fois qu il enregistre de nouvelle données.
 
J aimerais construire une requête  qui me renvoie la date la plus petite contenue dans cet ensemble de table qui est "mobile"
 
il semblerait que ca ne soit pas si facile alors !!!!
 
en tout cas , je ne comprends pas pourquoi la requete  
 

Code :
  1. select date from a,b;


 
ne fonctionne pas .
 
Merci de vos reponses et du temps accordé à mon probleme

Reply

Marsh Posté le 02-06-2009 à 11:44:57    

parcequ'il ne sait pas de quelle date tu parles ( a.date , ou b.date )
 
quand un champ porte le même nom dans plusieurs table,s tu dois appeler nomTable.nomChamp


---------------

Reply

Marsh Posté le 02-06-2009 à 11:46:34    

alors peut etrre faut il faire une jointure des 2 tables avant ?
 
Joindre les 2 colonnes date ?
cela doit etre possible  
je vais voir

Reply

Marsh Posté le 02-06-2009 à 13:51:53    

Je vais formuler alors ma nouvelle question , vous avez trois tables , a,b,c , dont la structure n a pas forcement quelque chose en commun à part une colonne DATETIME.
 
 
Comment feriez vous pour rechercher la date la plus petite ?
 
 

Reply

Marsh Posté le 02-06-2009 à 13:56:39    

ça marche pas ce qu'a proposé flo : "select least(min(a.date,b.date)) FROM a , b" ?


Message édité par Deamon le 02-06-2009 à 13:56:49
Reply

Marsh Posté le 02-06-2009 à 14:08:17    

franchement si t'as 3 tables de 1000 lignes avec cette méthode il va d'abord croiser inutilement et générer en mémoire une pseudo table de 1000x1000x1000 lignes (et ça m'étonnerait qu'elles fassent moins de 1000) -> mauvais plan.

 

trouver comment interroger le dictionnaire de donnée de ton sgbd, faire une procédure stockée qui va construire des requêtes dynamiques et interroger chaque table séparément, ou avec le langage de ton choix ça marche aussi -> bon plan.


Message édité par casimimir le 02-06-2009 à 14:08:52
Reply

Marsh Posté le 02-06-2009 à 14:10:09    

ou tout simplement un union
 
(SELECT MIN(date) as mini  FROM a)
UNION
(SELECT MIN(date) as mini FROM b)
....
(SELECT MIN(date) as mini  FROM  q)
ORDER BY mini DESC  
LIMIT 1
 
 


---------------

Reply

Marsh Posté le 02-06-2009 à 14:10:09   

Reply

Marsh Posté le 02-06-2009 à 16:18:31    

Je vous remercie tous de vos réponses et de l'attention portée à ma demande
 
La méthode  avec les unions marche très bien ,et vos être appliquée dans un cas où je dois le faire sur uniquement 2 tables.
 
Sinon , je me suis fais un algo en java qui recuperer les noms des tables dans mysql et qui va chercher ce qu'il faut apres.
 
En ce qui me concerne , vous m'avez bien aidé le sujet est clos !!!!!!

Reply

Marsh Posté le 27-06-2009 à 17:36:45    

_julien_ a écrit :

En fait , la base de données est connectée avec un logiciel , qui construit de nouvelles tables a chaque fois qu il enregistre de nouvelle données.

 

J aimerais construire une requête  qui me renvoie la date la plus petite contenue dans cet ensemble de table qui est "mobile"

 

il semblerait que ca ne soit pas si facile alors !!!!

 

en tout cas , je ne comprends pas pourquoi la requete

 
Code :
  1. select date from a,b;
 

ne fonctionne pas .

 

Merci de vos reponses et du temps accordé à mon probleme


sinon  un truc dans le genre :o

Code :
  1. select a.date as datea, b.date as dateb from a,b;
 


oups, j'avais pas vu le [resolu] [:cupra]


Message édité par bricocoman le 27-06-2009 à 17:39:11
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed