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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  RESOLU [SQL] Comment faire une telle requète dans une DB multivaluée?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

RESOLU [SQL] Comment faire une telle requète dans une DB multivaluée?

n°367505
gizmo
Posté le 20-04-2003 à 14:25:56  profilanswer
 

Prenons la table suivante toute simple:
 
Produits:
  - ID 1:1 (unique)
  - Usine 1:n
 
où usine est mutlivalué
 
J'aimerais savoir comment trouver l'ID du(des) produit(s) qui sont fabriqués par le plus grand nombre d'usines.
 
J'avais pensé à ça:
 
SELECT P.ID FROM Produits AS P  
WHERE count(P.Usine)=MAX(SELECT count(P2.Usine) FROM Produits AS P2)
 
Mais je n'ai aucune SGDB multivaluée sous la main pour tester la requète.
 
Si qq'un pouvait m'aider, c'est très important, merci!


Message édité par gizmo le 22-04-2003 à 13:46:27
mood
Publicité
Posté le 20-04-2003 à 14:25:56  profilanswer
 

n°367516
MagicBuzz
Posté le 20-04-2003 à 15:41:51  profilanswer
 

TP rulez :sol:

n°367534
gizmo
Posté le 20-04-2003 à 16:31:19  profilanswer
 

Bah non, c'est pas pour un TP, je dois faire un module de traduction de requète SGDB multivalué -> SGDB relationnel classique. Seulement, je ne connais pas bien toutes les subtilités des multivalués et leur syntaxe.

n°368045
MagicBuzz
Posté le 21-04-2003 à 22:40:52  profilanswer
 

Bah je sais pas ce qu'est un SGBD multivaulé.
 
Ca diffère en quoi d'un SGBDR ?

n°368181
gizmo
Posté le 22-04-2003 à 09:47:10  profilanswer
 

un DB multivaluée, c'est un DB dans laquelle un champs peut avoir un vecteur de valeurs. Ca permet d'éviter d'avoir une deuxième table avec la référence à un produit et touts les id référencé.
 
Par exemple, ca permet de mettre dans un même champs tous les numéros de téléphones de qq'un au lieu de créer une nouvelle table. Et ce, sans savoir combien de numéro il peut y avoir et sans utiliser un artifice de séparation comme une virgule.

n°368246
MagicBuzz
Posté le 22-04-2003 à 10:52:40  profilanswer
 

Ah ok, ça évite donc d'avoir des tables filles.
 
Hmmmm... Ben à priori, c'est une syntaxe qui doit différer du SQL classique quand même...
 
A moins que...
 
T'as essayé un truc du genre :
 
SELECT table.champMuliValué where table.id = xx
 
Genre, pour voir s'il te retourne plusieurs lignes ou une seule. S'il retourne plusieurs lignes, alors à priori, ta requête sera :
 
SELECT P.ID, COUNT(P.Usine) FROM Produits
GROUP BY P.ID
HAVING count(P.Usine)=MAX(SELECT count(P.Usine) FROM Produits)

n°368259
gizmo
Posté le 22-04-2003 à 11:01:42  profilanswer
 

Ben non, j'ai pas essayé, vu que:
 

Citation :


Mais je n'ai aucune SGDB multivaluée sous la main pour tester la requète.

 
 
Oracle 9i gère les multivalués, mais c'est un peu cher pour faire juste quelques tests :D

n°368335
MagicBuzz
Posté le 22-04-2003 à 12:12:13  profilanswer
 

gizmo a écrit :

Ben non, j'ai pas essayé, vu que:
 

Citation :


Mais je n'ai aucune SGDB multivaluée sous la main pour tester la requète.

 
 
Oracle 9i gère les multivalués, mais c'est un peu cher pour faire juste quelques tests :D


Si tu as Linux, tu peux télécharger gratuitement Oracle 9i pour Linux, tant que ça reste dans le cadre de tests bidouilles. (version personnelle, qui est gratuite)

n°368355
gizmo
Posté le 22-04-2003 à 12:42:18  profilanswer
 

intéressant, je ne savais pas cela, je vais regarder de ce coté.
Merci

n°368404
gizmo
Posté le 22-04-2003 à 13:46:07  profilanswer
 

J'ai trouvé qq'un qui m'a donné le code Oracle, le problème est donc résolu.

mood
Publicité
Posté le 22-04-2003 à 13:46:07  profilanswer
 

n°368440
MagicBuzz
Posté le 22-04-2003 à 14:36:43  profilanswer
 

Tu peux le poster pour nous en faire profiter ?

n°368442
gizmo
Posté le 22-04-2003 à 14:39:14  profilanswer
 

Bien sur:
 

Citation :


SQL> create type manuf_t is table of number;
  2  /
Type created.
 
SQL> create table products
  2  ( product_id number primary key
  3  , product_name varchar2(30)
  4  , manufacturers manuf_t
  5  ) nested table manufacturers store as product_manufacturers;
 
Table created.
 
SQL> insert into products values (1,'puppet',manuf_t(1,3,5));
1 row created.
 
SQL> insert into products values (2,'balloon',manuf_t(2));
1 row created.
 
SQL> insert into products values (3,'teddy bear',manuf_t(1,2,4));
1 row created.
 
SQL> insert into products values (4,'puzzle',manuf_t(3,6));
1 row created.
 
SQL> select product_name
  2  from   products p, table(p.manufacturers) pm
  3  group by p.product_name
  4  having count(*) =
  5  ( select max(cnt) from
  6    ( select count(*) cnt
  7      from products p, table(p.manufacturers) pm
  8      group by p.product_id
  9    )
 10* );
 
PRODUCT_NAME
------------------------------
puppet
teddy bear

 
 
c'est réalisé en utilisant une nested table.

n°368462
MagicBuzz
Posté le 22-04-2003 à 14:56:12  profilanswer
 

ok :jap:
 
y'a pas à dire, j'aime mieu une bonne vrai table, c'est plus propre :)

n°368477
gizmo
Posté le 22-04-2003 à 15:07:00  profilanswer
 

moi aussi, mais j'ai pas le choix pour ce travail :/


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

  RESOLU [SQL] Comment faire une telle requète dans une DB multivaluée?

 

Sujets relatifs
[ MySQL ] Incrémenter un champ en une requete.[SQL] le contraire
assignment makes pointer from integer without a cast ???? [ Résolu ][C/C++] Dll corrompue ou invalide (erreur LNK1136) [Résolu]
[MS SQL SERVER] - Pb de caractèresappliquer une fonction à toutes les valeurs d'un tableau... [résolu]
Besoin d'aide en SQLpossible de stocker des Structures dans des Collections ? [RESOLU]
[Ansi C] caster un int en char* [resolu][SWING + THREAD] Création d'une console - RESOLU
Plus de sujets relatifs à : RESOLU [SQL] Comment faire une telle requète dans une DB multivaluée?


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