Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1226 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Selection et tri sur plusieurs tables avec memes colonnes

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Selection et tri sur plusieurs tables avec memes colonnes

n°1972972
agyspace
Posté le 11-03-2010 à 12:54:01  profilanswer
 

Salut tout le monde,
 
J'ai 2 tables qui representent une liste de taches a executer:
 
TABLE1 (ne contient que des taches de type 1)
id   |  type |  date_exec
___|______|________________
1         1         1er mars - 10h
2         1         2 mars - 15h
3         1         3 mars - 14h
 
TABLE2 (ne contient que des taches de type 2)
id   |  type |  date_exec
___|______|________________
1         2         1er mars - 9h
2         2         1er mars - 11h
3         2         3 mars - 14h
 
Je veux recuperer la prochaine tache a executer, tout type de tache confondu (c'est a dire sur toutes les taches des 2 tables).
 
La premiere requete rapide, bete et simple que j'ai trouve et celle-ci:
SELECT * FROM  
      (SELECT * FROM
                (SELECT id, TYPE, DATE_exec FROM TABLE1
                 UNION
                 SELECT id, TYPE, DATE_exec FROM TABLE2)
       ORDER BY date_exec)
WHERE ROWNUM=1 ;
 
Le (bon) resultat retourne est le suivant:
id   |  type |  date_exec
___|______|________________
1         2         1er mars - 9h
 
Existe-t-il une requete plus "fine" pour obtenir le resultat que j'attends?
 
Merci de votre aide.


Message édité par agyspace le 11-03-2010 à 12:54:48
mood
Publicité
Posté le 11-03-2010 à 12:54:01  profilanswer
 

n°1972987
boboss75
Posté le 11-03-2010 à 13:52:30  profilanswer
 

n'est-il pas possible de tout mettre dans la même table ?

n°1972994
macgawel
Posté le 11-03-2010 à 14:06:22  profilanswer
 

boboss75 a écrit :

n'est-il pas possible de tout mettre dans la même table ?


 [:plusun]  
 
A moins d'avoir une très bonne raison de le faire, ça n'a aucun intérêt.
Par exemple, pour ton problème une requête de base suffit (sans jointure ou autre)...

n°1973003
agyspace
Posté le 11-03-2010 à 14:45:53  profilanswer
 

macgawel a écrit :


 [:plusun]  
 
A moins d'avoir une très bonne raison de le faire, ça n'a aucun intérêt.
Par exemple, pour ton problème une requête de base suffit (sans jointure ou autre)...


 
En effet, s'il y a 2 tables, c'est qu'il y a une bonne raison derriere avec laquelle je n'ai pas envie de vous embeter.
 
Concernant ta reponse, effectivement il est possible de faire ca avec une requete de base comme celle qui est dans mon message initial (sans jointure explicite ou autre) par exemple. Je voudrais simplement etre sur qu'il n'y a pas mieux que ma requete, donc si vous avez des exemples de requetes plus optimisees, ils sont les bienvenus!

n°1973012
rufo
Pas me confondre avec Lycos!
Posté le 11-03-2010 à 15:30:40  profilanswer
 

Pour le coup, on aimerait bien être "embêté" et avoir la "bonne" raison. Perso, je parie qu'au final, elle sera pas si bonne que ça ta raison... :/ Tout ce que t'as à faire, c'est faire 1 table de tâches et rajouter une colonne qui va contenir son type si y'a besoin de filtrer par type de tâche...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°1973023
agyspace
Posté le 11-03-2010 à 16:21:30  profilanswer
 

rufo a écrit :

Pour le coup, on aimerait bien être "embêté" et avoir la "bonne" raison. Perso, je parie qu'au final, elle sera pas si bonne que ça ta raison... :/ Tout ce que t'as à faire, c'est faire 1 table de tâches et rajouter une colonne qui va contenir son type si y'a besoin de filtrer par type de tâche...


 
Lol, bon ben j'aurais du me douter que tout le monde allait repondre a cote (comme dab) en remettant en question le ciel, la terre et les oiseaux mais bon j'aurais tente...J'en deduis donc que personne n'a de reponse a ma question et donc qu'il n'y a pas plus optimise avec 2 tables.
 
Merci quand meme.
 

n°1973026
cymp
Posté le 11-03-2010 à 16:28:55  profilanswer
 

Ca vous vient pas a l'idée que dans le cadre du boulot on vous fournit une base qu'on n'a pas le droit de modifier et qu'il faut faire avec? Tout le monde n'est pas un geek seul responsable de son appli perso développée dans son garage.
 
Alors au lieu de jouer au finot, autant dire "je sais pas" comme moi

Message cité 1 fois
Message édité par cymp le 11-03-2010 à 16:31:34
n°1973029
rufo
Pas me confondre avec Lycos!
Posté le 11-03-2010 à 16:34:16  profilanswer
 

cymp a écrit :

Ca vous vient pas a l'idée que dans le cadre du boulot on vous fournit une base qu'on n'a pas le droit de modifier et qu'il faut faire avec? Alors au lieu de faires les finots, autant dire "je sais pas" comme moi


 
Justifier que la BD a été modélisée avec 2 tables pour listes de tâches parce que c'est dans le cadre du boulot et qu'on ne peut pas modifier, c'est pas ce que j'appelle une bonne raison, c'est une erreur de conception qui a été fait auparavant et un boulet qu'il faut se traîner aujourd'hui :/
 
Il pouvait nous dire : y'a 2 tables actuellement, ça a été mal conçu, normalement il aurait fallu en faire qu'une mais bon, je peux pas modifier et je dois faire avec. Non, là, il nous dit qu'il y a une très bonne raison. J'aimerais bien la connaître, c'est tout.


Message édité par rufo le 11-03-2010 à 16:34:24

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°1973031
cymp
Posté le 11-03-2010 à 16:43:45  profilanswer
 

et donc si tu connais pas cette raison ca t'empeche completement de répondre à la question?

n°1973037
rufo
Pas me confondre avec Lycos!
Posté le 11-03-2010 à 16:52:04  profilanswer
 

Y'a normalement pas besoin de sous-requêtes :  
SELECT id, TYPE, DATE_exec FROM TABLE1
UNION
SELECT id, TYPE, DATE_exec FROM TABLE2
ORDER BY date_exec
LIMIT 0, 1
 
Comme le SGBD est pas précisé, je donne ce qui marche pour MySQL. Après, y'a qu'à trouver l'équivalent de LIMIT.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
mood
Publicité
Posté le 11-03-2010 à 16:52:04  profilanswer
 

n°1973040
agyspace
Posté le 11-03-2010 à 17:21:22  profilanswer
 

rufo a écrit :

Y'a normalement pas besoin de sous-requêtes :  
SELECT id, TYPE, DATE_exec FROM TABLE1
UNION
SELECT id, TYPE, DATE_exec FROM TABLE2
ORDER BY date_exec
LIMIT 0, 1
 
Comme le SGBD est pas précisé, je donne ce qui marche pour MySQL. Après, y'a qu'à trouver l'équivalent de LIMIT.


 
Autant pour moi je n'avais pas precise le SGBD et malheureusement je travaille avec Oracle donc le statement le plus proche de LIMIT sous mysql c'est ROWNUM (ROW_NUMBER) avec Oracle.
 
Et je cherche un moyen d'utiliser ROWNUM sans sous-requete mais apres des recherches sur le net, je n'ai pas trouve comment faire et ca ne parait pas possible. Je voulais juste verifier que c'etait bien le cas.

n°1973191
macgawel
Posté le 12-03-2010 à 09:57:58  profilanswer
 

agyspace a écrit :


 
Autant pour moi je n'avais pas precise le SGBD et malheureusement je travaille avec Oracle donc le statement le plus proche de LIMIT sous mysql c'est ROWNUM (ROW_NUMBER) avec Oracle.
 
Et je cherche un moyen d'utiliser ROWNUM sans sous-requete mais apres des recherches sur le net, je n'ai pas trouve comment faire et ca ne parait pas possible. Je voulais juste verifier que c'etait bien le cas.


A partir du moment où il y a deux tables non liées, tu es obligé d'utiliser des sous-requêtes (de faire un UNION ou équivalent, quoi).
 
Après, rufo t'a proposé une autre manière de faire et sous Oracle tu peux les comparer et choisir la plus performante...

n°1973196
casimimir
Posté le 12-03-2010 à 10:09:24  profilanswer
 

mets plutôt un "UNION ALL" a la place de "UNION"
 
si ton calendrier va très loin dans le temps et que tu sais que tes prochaines taches ne sont jamais très loin tu peux mettre un filtre sur 30 jours ou un truc du style.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Selection et tri sur plusieurs tables avec memes colonnes

 

Sujets relatifs
Basique:Sélection Worksheet Excel depuis une macro ?Remplir un tableau à plusieurs dimensions
[RESOLU]Afficher le plus grand ID de plusieurs sous_id[Résolu] Jointure entre deux tables
Actualiser un prix automatiquement suivant la selection d'un poidsselection d'une plage dans une feuille non active
[SQL Server 2008]Lié des tables entre 2 Bases - possible ?[Résolu] Faire plusieurs requetes mysql en meme temps
afficher plusieurs éléments en une seule bouclejointure sur 3 tables
Plus de sujets relatifs à : Selection et tri sur plusieurs tables avec memes colonnes


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR