Recherche d'un ensemble dans un autre ensemble - SQL/NoSQL - Programmation
Marsh Posté le 20-12-2007 à 11:45:07
pour savoir les salles qui ont le soft 1 et 2, après c'est juste une histoire d'adaptation
Code :
|
Marsh Posté le 20-12-2007 à 12:20:19
J'avais pas pensé au COUNT, bien joué
Y'a juste à modifier le HAVING pour vérifier que la somme égale le nombre de logiciels demandés et ça rulez.
Code :
|
Autre façon intéressante basée sur un COUNT () en utilisant les sous-requêtes corrélées :
Code :
|
Si y'en a qui ont d'autres solutions pour résoudre ce type de problème, n'hésitez pas !
Merci
Marsh Posté le 20-12-2007 à 13:33:50
count(*) est potentiellement une mauvaise idée.
Si, par hasard, tu te retrouves avec un doublon comme ça:
+-----------+--------------+ |
Ta requête va te remonter "vrai" alors que ce n'est pas ce que tu cherches.
Je remplacerais donc count(*) par count(distinct num_logiciel )
Marsh Posté le 20-12-2007 à 13:43:59
Ouep, j'y avais pensé aux doublons mais ça c'est réglé par la compound primary key qui n'existe pas dans ce test mais en réalité si !
Marsh Posté le 20-12-2007 à 14:40:25
Tiens, c'est marrant : en ajoutant les PK sur cet exemple, ma requête ne fonctionne plus
|
Je décide donc de faire plus propre en ajoutant la table "salles" :
Code :
|
On ré-exécute la requête un peu modifiée pour utiliser cette table et là ça marche ce qui est normal cette fois ci..
|
Bizarre, n'est-ce pas ?
Marsh Posté le 20-12-2007 à 15:20:21
count(distinct num_logiciel)
ça devrait faire l'affaire. en tout cas, sous SQL Server 2005 ça marche nickel chrome.
Code :
|
|
Marsh Posté le 30-05-2008 à 17:34:56
Moi aussi j'ai un problème similaire :
Comment on fait pour dire qu'un sous-ensemble est présent dans un ensemble :
que le couple (1,2) est présent dans la liste de couple ((1,2),(1,3), etc.)
C'est comme un IN mais sur des ensembles, pas sur une simple valeur...et ça compile pas .
Marsh Posté le 17-07-2008 à 10:57:17
HappyHarry a écrit : utilise une clause exists |
Parfaitement raison, j'avais déjà trouvé et ça s'applique très bien. Voici un exemple en JPQL :
... |
Marsh Posté le 20-12-2007 à 11:33:25
Salut !
J'ai un p'tit problème que je n'arrive pas à résoudre : je dois chercher un ensemble dans un autre ensemble, j'ai essayé pleins de trucs mais sans succès.
Mon but est de résoudre ce problème en une seule requête SQL, sans utiliser de procédure stockée ou de code niveau PHP sinon c'est pas marrant.
Voici un exemple pour mieux comprendre :
Le schéma de test avec ses données :
Graphiquement :
mysql> select * from salles_softs;
+-----------+--------------+
| num_salle | num_logiciel |
+-----------+--------------+
| 50 | 1 |
| 50 | 2 |
| 51 | 3 |
+-----------+--------------+
mysql> select * from softs;
+--------------+
| num_logiciel |
+--------------+
| 1 |
| 2 |
| 3 |
+--------------+
Avez-vous une idée de la requête SQL qu'il faudrait écrire pour savoir si la salle 50 contient les logiciels 1 et 2 ? Ou encore plus compliqué : savoir quelles sont les salles qui contiennent les logiciels 1 et 2 ?
En lisant la question, ça paraît enfantin mais je bloque, c'est chiant
A votre bon cœur !