SQL, : Je n'arrive pas à formuler la requète qui va bien... - SQL/NoSQL - Programmation
Marsh Posté le 12-03-2003 à 21:13:40
SELECT DISTINCT je crois
edit: nan je dis des conneries, mais le bla2 de toto tu l'as dans ton avant-dernier exemple. je vois pas trop ou tu veux en venir
Marsh Posté le 12-03-2003 à 21:18:37
Le problème est que ma première solution me renvoi 4 ligne alors qu'il n'y a que 3 élèves. Je veux fair un parcour unique...
Marsh Posté le 12-03-2003 à 21:20:27
tu veux quoi au juste ?
ça ?
Code :
|
C'est impossible sans utiliser des fonctions d'affichage qui sont rarement supportées par le moteur lui-même, mais l'outils de requête (SQL+ d'Oraclepar exemple)
C'est à ton traîtement derrière de faire le ménage
Marsh Posté le 12-03-2003 à 21:20:44
Skylight a écrit : et avec un ptit LEFT JOIN |
de fair :
"FROM eleve, ramarque WHERE eleve.id=remarques.id"
reviens strictement au même que :
"FROM eleve LEFT JOIN ramarque ON eleve.id=remarques.id"
Marsh Posté le 12-03-2003 à 21:21:17
Sinon, si tu veux ça, oublie tout de suite, c'est impossible :
Code :
|
Marsh Posté le 12-03-2003 à 21:21:45
SELECT eleve.id,eleve.nom,remarques.rem
FROM eleve NATURAL JOIN remarques
Marsh Posté le 12-03-2003 à 21:22:56
ZeBorG a écrit : de fair : |
Que tu fasses un LEFT, RIGHT, INNER ou OUTER, ça reviendra au même tes cardinalités sont 1,n dans dont exemple, les LEFT et OUTER ne se font ressentir que lorsque tu as des cardinalités 0,n d'un côté ou de l'autre.
Et ça changera rien à ton problème.
Marsh Posté le 12-03-2003 à 21:23:47
l'idéal serait un truc comme ça :
Code :
|
(en supposant qu'il n'y ai pas plus de 2 remarques...
Marsh Posté le 12-03-2003 à 21:24:30
sinon, pour ton probleme, ta premiere solution est la meilleure.
(et tu devrai indexer ta deuxieme table)
Marsh Posté le 12-03-2003 à 21:30:31
Skylight a écrit : sinon, pour ton probleme, ta premiere solution est la meilleure. |
Je veux obtenir autant de ligne que d'élève donc non.
Quant à l'indexage des tables, elle ne sont qu'une simplification des vrais table qui elle disposent des indexage qui vont bien...
Marsh Posté le 12-03-2003 à 21:33:25
ZeBorG a écrit : Je veux obtenir autant de ligne que d'élève donc non. |
dans ce cas tu n'aura jamais toutes les remarques des eleves sur un nombre egal de lignes d'eleves
Marsh Posté le 12-03-2003 à 21:35:23
et en supposant qu'il n'y est que de remarques maximum par eleve ?
genre :
SELECT eleve.id, nom, ?? rem1, ?? rem2
...
Marsh Posté le 12-03-2003 à 21:41:26
ouais, j'y ai penssé mais je ne peux pas modifier la table en question...
Marsh Posté le 12-03-2003 à 21:50:13
ZeBorG a écrit : de fair : |
Dans le 1er cas, tu n'auras que les élèves qui ont des remarques, dans le 2ème tu auras tous les éléves, y compris ceux qui n'ont aucune remarque
Marsh Posté le 12-03-2003 à 21:51:12
mrBebert a écrit : |
tout a fait
Marsh Posté le 12-03-2003 à 22:04:31
mrBebert a écrit : |
Je viens de faire le test (MySQL 3.23.54) et je maintiens ce que j'ai dis.
Dans les deux cas, même les élèves qui n'ont pas de remarques sont listé.
Marsh Posté le 12-03-2003 à 22:09:34
Avec la requête :
SELECT * FROM eleve, remarque WHERE eleve.id = remarques.id
tu as des lignes de "eleve", qui n'ont pas d'id correspondant dans la table "remarque"
Je demande à voir là
Marsh Posté le 12-03-2003 à 22:13:58
ZeBorG a écrit : l'idéal serait un truc comme ça :
|
Je ne connais qu'une BDD capable de faire çà : Oracle.
Et encore ce serait plutôt :
Code :
|
Pour çà, il fait créer un de type de donnée du genre TABLE OF ...
Peut-être que Postgres peut le faire ?
Sinon, ben t'as plus qu'à faire une première requête pour les id, nom et de boucler dessus pour récupérer les remarques avec une autre nequête répétée autant de fois que t'as d'élève !
Marsh Posté le 12-03-2003 à 22:17:17
Mara's dad a écrit :
|
Nan, Oracle sait faire mieu...
Je regarde si je retrouve mes cours
Marsh Posté le 12-03-2003 à 22:18:42
Tiens, c'est intéressant ca.
Est-ce qu'il existe une fonction qui concatène les lignes réunies par un GROUP BY ?
Par exemple, si on a :
id | value | txt
1 | 5 | aaa
1 | 7 | bbb
2 | 8 | ccc
SELECT id, sum(value) FROM ... GROUP BY id va renvoyer
id | sum(value)
1 | 12
2 | 8
Est-ce qu'il existe une fonction du même type que le sum, qui concaténerait des chaines de caractères ?
SELECT id, ???(txt) FROM ... GROUP BY id qui renverrait
id | ???(txt)
1 | aaabbb
2 | ccc
edit : ca pose un problème quand même. Contrairement aux autres fonctions d'aggrégation, l'ordre aurait son importance
Marsh Posté le 12-03-2003 à 22:31:37
MagicBuzz a écrit : |
Alors là tu m'intéresse beaucoup !
J'en ai chié des bulles pour une requête de ce genre.
Tout çà pour avoir un XML hiérachique et pas tabulaire...
Marsh Posté le 12-03-2003 à 22:32:05
Bon, là je m'embrouille tout seul, vous aurez pas la solution
Marsh Posté le 12-03-2003 à 22:35:42
Je sais qu'il y a une fonction qui permet de retourner les lignes sous forme de colonne.
Mais bon, après je vois pas ce qu'on peut en faire au niveau programmation, vu qu'on ne sais pas combien il y a de colonnes.
Mais c'est possible
Marsh Posté le 12-03-2003 à 22:43:06
mrBebert a écrit : Avec la requête : |
tout mes excuses, tu as raison.
voici le test :
http://wanab.free.fr/test/test.php
Marsh Posté le 12-03-2003 à 22:46:52
ouf, tu m'as fait peur
Finalement, tu ne faisais jamais que remettre en cause tout SQL
Marsh Posté le 12-03-2003 à 22:52:06
mrBebert a écrit : ouf, tu m'as fait peur |
je dirait même tout l'algère ensembliste
Marsh Posté le 12-03-2003 à 22:55:14
c'est bon, me suis gouré. On va pas en fair tout un plat...
Marsh Posté le 12-03-2003 à 22:57:00
MagicBuzz a écrit : |
S'il y a une contradiction dans les maths, ca veut dire que toutes les maths sont fausses ? (démonstration par l'absurde)
Marsh Posté le 12-03-2003 à 22:57:48
Mais comme les maths sont justes depuis des milliers d'années, il est donc certain que ZeBorg a tort
CQFD
Marsh Posté le 12-03-2003 à 22:58:10
Mon Dieu ! Et alors tu ne serais pas mon père
Quoi ? J'ai dis une connerie ?
Marsh Posté le 12-03-2003 à 23:01:09
Skylight a écrit : Mais comme les maths sont justes depuis des milliers d'années, il est donc certain que ZeBorg a tort |
As t'on prouvé qu'elles étaient justes ?
Je dirais plutot qu'on les croyais justes car on n'avait pas trouvé de contradiction jusqu'à maintenant.
Mais ZeBorg est arrivé, et la lumière fut
(quoique, j'ai un doute. La lumière qui fut, c'est peut être un autre )
Marsh Posté le 12-03-2003 à 23:01:33
recentrons le débat...
ça ce serai bien :
mrBebert a écrit : ... |
Marsh Posté le 12-03-2003 à 23:03:35
Bon, après y'a impossible et impossible...
Normalement, il est impossible de compter le nombre d'occurences d'un mot dans un champ.
Vous avez 10 minutes pour trouver une solution pour le faire (bon, j'ai un peu galèré 2 heures dessus le mois dernier avant d'avoir l'illumination )
Marsh Posté le 12-03-2003 à 23:03:41
et comme vous pouvez le voir sur mon 4ieme test, le sum() ne marche pas :
http://wanab.free.fr/test/test.php
Marsh Posté le 12-03-2003 à 21:11:09
Petite question SQL.
Je dispose des tables suivante :
Ainsi, à chaque élève est associer un id et un nom (1er table). Chaque élève peux avoir 0, 1 ou plusieurs remarques (2nd table).
Je veux selectionner l'id, le nom et les remarques de chaque élève.
Le problème est qu'avec :
SELECT eleve.id, nom, rem
FROM eleve, remarques
WHERE eleve.id = remarques.id
j'obtiens :
Ne voulant pas obtenir plusieur fois le même élève je dois faire :
SELECT eleve.id, nom, rem
FROM eleve, remarques
WHERE eleve.id = remarques.id
GROUP BY eleve.id
Et j'obtiens :
Ici, il me manque la remarque bla2 de l'élève toto.
Le problème est que j'aimerais connaitre toute les remarques de chaque élèves et ceci en éfectuant qu'un seul SELECT.
Des idée ?