RESOLU [SQL] Comment faire une telle requète dans une DB multivaluée? - SQL/NoSQL - Programmation
Marsh Posté le 20-04-2003 à 16:31:19
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.
Marsh Posté le 21-04-2003 à 22:40:52
Bah je sais pas ce qu'est un SGBD multivaulé.
Ca diffère en quoi d'un SGBDR ?
Marsh Posté le 22-04-2003 à 09:47:10
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.
Marsh Posté le 22-04-2003 à 10:52:40
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)
Marsh Posté le 22-04-2003 à 11:01:42
Ben non, j'ai pas essayé, vu que:
Citation : |
Oracle 9i gère les multivalués, mais c'est un peu cher pour faire juste quelques tests
Marsh Posté le 22-04-2003 à 12:12:13
gizmo a écrit : Ben non, j'ai pas essayé, vu que:
|
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)
Marsh Posté le 22-04-2003 à 12:42:18
intéressant, je ne savais pas cela, je vais regarder de ce coté.
Merci
Marsh Posté le 22-04-2003 à 13:46:07
J'ai trouvé qq'un qui m'a donné le code Oracle, le problème est donc résolu.
Marsh Posté le 22-04-2003 à 14:39:14
Bien sur:
Citation : |
c'est réalisé en utilisant une nested table.
Marsh Posté le 22-04-2003 à 14:56:12
ok
y'a pas à dire, j'aime mieu une bonne vrai table, c'est plus propre
Marsh Posté le 20-04-2003 à 14:25:56
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