[SQL] Requete , where avec plusieurs conditions

Requete , where avec plusieurs conditions [SQL] - SQL/NoSQL - Programmation

Marsh Posté le 19-01-2005 à 17:14:45    

Bonjour,
 
j'ai une base sous sql serveur et une appli en VB
 
j'ai un table competencescv
format : identifiant,competences  
 
Ex :
285857,anglais
285857,cobol
888857,asp
888857,j++
 
etc...
Je cherche l'identifiant de celui qui a pour competences : anglais et cobol soit 285857
 
j'ai testé plusieur choses je n'y suis pas arrivé appart avec un boucle  
ou je repete :
AND (identifiant IN ( (SELECT identifiant FROM   competencescv WHERE  competences = '" & Trim(List1.List(i%)) & "')))"
 
mais c'est tres lourd et pas propre :D
 
 
 
SELECT * FROM competencescv
WHERE     (competences IN ('anglais')) AND (competences IN ('cobol'))
 
ca ne fonctionne pas :(
 
merci de votre aide  
 
 
 

Reply

Marsh Posté le 19-01-2005 à 17:14:45   

Reply

Marsh Posté le 19-01-2005 à 17:36:31    

salut,
 
si tu n'as que ces deux contraintes, tu peux faire
 
SELECT c1.identifiant FROM competencescv c1,c2
WHERE c1.identifiant = c2.identifiant  
AND c1.competences = 'anglais'
AND c2.competences = 'cocol'

Reply

Marsh Posté le 19-01-2005 à 17:39:02    

bah j'ai autant de possibilité que de competences (+/- 50 ) :D
 
donc la je dois creer a chaque vois un c3,c4 etc.. ?
 

Reply

Marsh Posté le 19-01-2005 à 17:42:56    

Si tu veux avoir l'identifiant qui correspond à x compétences, cette méthodes n'est pas adaptée.

Reply

Marsh Posté le 19-01-2005 à 17:50:16    

mrmask a écrit :

Bonjour,
 
j'ai une base sous sql serveur et une appli en VB
 
j'ai un table competencescv
format : identifiant,competences  
 
Ex :
285857,anglais
285857,cobol
888857,asp
888857,j++
 
etc...
Je cherche l'identifiant de celui qui a pour competences : anglais et cobol soit 285857
 
j'ai testé plusieur choses je n'y suis pas arrivé appart avec un boucle  
ou je repete :
AND (identifiant IN ( (SELECT identifiant FROM   competencescv WHERE  competences = '" & Trim(List1.List(i%)) & "')))"
 
mais c'est tres lourd et pas propre :D
 
 
 
SELECT * FROM competencescv
WHERE     (competences IN ('anglais')) AND (competences IN ('cobol'))
 
ca ne fonctionne pas :(
 
merci de votre aide


 
SELECT tab.identifiant FROM tab WHERE tab.competence='Cobol'  
INTERSECT
SELECT tab.identifiant FROM tab WHERE tab.competence='Anglais'
 
essaie ca

Reply

Marsh Posté le 19-01-2005 à 17:52:51    

Erreur dans la clause WHERE à côté de 'INTERSECT'.
Impossible d'analyser le texte de la requête.

Reply

Marsh Posté le 19-01-2005 à 17:53:07    

j'ai testé ca :
SELECT     identifiant FROM         competencescv WHERE     (competences = 'anglais')
intersec
SELECT     identifiant FROM         competencescv WHERE     (competences = 'cobol')
 
erreur aussi

Reply

Marsh Posté le 19-01-2005 à 17:59:43    

intersec ne fonctionne pas avec sql server.
 
De toutes façon le pb est le meme car il faudra boucler si le nombre de compétences lors de la recherche est superieur à 2

Reply

Marsh Posté le 19-01-2005 à 18:01:06    

dites je suis pas un expert en sql
 
mais c tellement "exeptionnel" ce que je cherche ?

Reply

Marsh Posté le 19-01-2005 à 18:05:32    

Faut utiliser UNION sous SqlServer
Pas l'exemple sous la main mais demain au taf ...

Reply

Marsh Posté le 19-01-2005 à 18:05:32   

Reply

Marsh Posté le 19-01-2005 à 18:14:09    

essaie

Code :
  1. select identifiant
  2. from competencescv
  3. group by identifiant
  4. having competences in ('anglais', 'cobol')

Reply

Marsh Posté le 19-01-2005 à 18:24:22    

la colonne 'comptencescv.competences' n'est pas valide dans la clause HAVING parce qu'elle n'est pas contenue dans une fonction d'agrégatin ou dans la clause group by.

Reply

Marsh Posté le 19-01-2005 à 18:26:50    

SELECT DISTINCT identifiant
FROM         competencescv
GROUP BY identifiant, competences
HAVING      (competences IN ('C++', 'J++'))

Reply

Marsh Posté le 19-01-2005 à 18:27:07    

enfait il me ressort tout ce qui est c++ et j++ ici dans cet ex

Reply

Marsh Posté le 20-01-2005 à 09:13:55    

oui, j'avais posté ça à l'arrache en partant du bureau :D
cela devrait convenir davantage
 

Code :
  1. SELECT identifiant
  2. FROM
  3.    (SELECT DISTINCT identifiant, competences
  4.     FROM COMPETENCESCV
  5.     WHERE competences IN ('anglais', 'cobol'))
  6. GROUP BY identifiant
  7. HAVING COUNT(*) = 2


Message édité par pains-aux-raisins le 20-01-2005 à 09:16:37
Reply

Marsh Posté le 20-01-2005 à 13:28:59    

merci,
 
le count correspond a quoi ?
le nombre de critere ?
car si je met juste cobol je n'ai aucun resultat :D

Reply

Marsh Posté le 20-01-2005 à 13:41:43    

le count doit être égal au nombre de critères.

Reply

Marsh Posté le 20-01-2005 à 14:01:41    

ecoute je te remercie ca a l'air de fonctionner
merci bien

Reply

Marsh Posté le 20-01-2005 à 14:14:38    

ça ne marche que si le couplet (identifiant, competences) est unique, car si tu peux avoir des doublons dans ta table, ça n'ira pas ...

Reply

Marsh Posté le 20-01-2005 à 14:19:19    

d'où le distinct :o

Reply

Marsh Posté le 20-01-2005 à 14:21:50    


 
j'l'avais point vu  :jap:

Reply

Marsh Posté le 20-01-2005 à 14:29:41    

j'ai préparé le buché :D

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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