Requête SQL pour un unique id

Requête SQL pour un unique id - SQL/NoSQL - Programmation

Marsh Posté le 30-10-2010 à 10:24:45    

Bonjour,
J'ai crée une base de données où j'ai une table Utilisateur avec des 'idUtilsateur', une table Propriete avec des 'idPropriete' et une table Donnee qui associe un 'idUtilisateur' avec un 'idPropriete' plus une 'valeur'
 
J'aimerais effectuer une requête sql dans ma table Donnee pour récupérer les id des utilisateurs qui possède par exemple un idPropriete 4 avec la valeur "Gérard" et un idPropriete 5 avec la valeur "Tartiflette"
 
Globalement cela devrait se présenter comme sa :
 
SELECT idUtilisateur FROM Donnee WHERE idPropriete = 4 AND valeur = Gérard AND idPropriete = 5 AND valeur = Tartiflette
 
 
Voilà alors déjà je suis pas sur de moi pour les conditions et ensuite cette requête marchera même si les valeurs sont affecter a des idUtilisateur différents. Comment prendre en compte qu'il doit s'agir d'un même idUtilisateur ?

Reply

Marsh Posté le 30-10-2010 à 10:24:45   

Reply

Marsh Posté le 30-10-2010 à 20:06:20    

Déjà, ça m'étonnerait forcément que cette requête retourne une ligne qui puisse vérifier idPropriete=4 AND idPropriete=5 :D  
 
Plutôt quelque chose dans ce genre :
SELECT idUtilisateur
FROM Donnee
WHERE (idPropriete = 4 AND valeur = Gérard) OR (idPropriete = 5 AND valeur = Tartiflette)

Reply

Marsh Posté le 30-10-2010 à 20:42:11    

oui je me suis rendu compte de sa ^^
requête que vous proposé ne marche pas non plus, car je récolterais les id pour une OU l'autre des conditions et non pas les deux

Reply

Marsh Posté le 30-10-2010 à 22:41:44    

:heink:  
Non, tu récupéres toute les lignes qui respectent au moins l'une des conditions [:proy]

Reply

Marsh Posté le 02-11-2010 à 09:58:53    

Si tu dois trouver les idUtilisateur qui ont a la fois idPropriete 4/Gerard et idPropriete 5/tartiflette tu vas devoir faire un join sur la table avec elle meme.
 
Un truc dans ce genre la:

Code :
  1. SELECT a.idUtilisateur
  2. FROM Donnee a
  3. JOIN Donne b ON a.idUtilisateur = b.idUtilisateur AND b.idPropriete = 4 AND b.valeur = Gerard
  4. WHERE a.idPropriete = 5 AND a.valeur = Tartiflette


 
Il y a probablement moyen de faire ca sans le Join, avec quelque chose comme ca (j'ai pas essayé donc c +- au pif :) ):

Code :
  1. SELECT idUtilisateur
  2. FROM Donnee
  3. WHERE (idPropriete = 4 AND valeur = Gérard) OR (idPropriete = 5 AND valeur = Tartiflette)
  4. GROUP BY idUtilisateur
  5. HAVING Count(*) > 1


Ca ne marchera bien que si idPropriete + valeur = record unique.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed