Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

question SQL puissante

9 réponses
Avatar
jeorme
Bonjour à tous,

petite colle en SQL

j'ai une table sous cette forme:

empl_nom competences niveau
DUPOND 1 4
DUPOND 1 2
DURAND 1 4
DURAND 2 3
DURAND 3 2

je voudrais que grace à un miracle SQL (j'y ai séché tout l'après midi) que
ma requete sorte les personnes dont :
- la competence 1 à un niveau 4 et que la competence 2 a un niveau 3

résultat:

empl_nom competences niveau
DURAND 1 4
DURAND 2 3



Merci d'avance

9 réponses

Avatar
Via
Bonjour Jérôme.

Pour moi ça doit donner un truc du genre :
SELECT empl_nom, competences, niveau FROM Nom_Table WHERE (competences = 1
AND niveau = 4) OR (competences = 2 AND niveau = 3);
Normalemenent ça marche !

Via :)

"jeorme" a écrit dans le message de
news:%
Bonjour à tous,

petite colle en SQL

j'ai une table sous cette forme:

empl_nom competences niveau
DUPOND 1 4
DUPOND 1 2
DURAND 1 4
DURAND 2 3
DURAND 3 2

je voudrais que grace à un miracle SQL (j'y ai séché tout l'après midi)


que
ma requete sorte les personnes dont :
- la competence 1 à un niveau 4 et que la competence 2 a un niveau 3

résultat:

empl_nom competences niveau
DURAND 1 4
DURAND 2 3



Merci d'avance








Avatar
Bonjour,

... where (competences = 1 AND niveau = 4) OR (competences = 2 AND niveau 3)

c'est pas sa que tu veux ?
où j'ai mal compris.

- Gilles -


"jeorme" a écrit dans le message de news:
#
Bonjour à tous,

petite colle en SQL

j'ai une table sous cette forme:

empl_nom competences niveau
DUPOND 1 4
DUPOND 1 2
DURAND 1 4
DURAND 2 3
DURAND 3 2

je voudrais que grace à un miracle SQL (j'y ai séché tout l'après midi)


que
ma requete sorte les personnes dont :
- la competence 1 à un niveau 4 et que la competence 2 a un niveau 3

résultat:

empl_nom competences niveau
DURAND 1 4
DURAND 2 3



Merci d'avance








Avatar
jeorme
merci mais désolé car dans ce cas DUPOND apparaît quand même !!
"Via" a écrit dans le message de news:

Bonjour Jérôme.

Pour moi ça doit donner un truc du genre :
SELECT empl_nom, competences, niveau FROM Nom_Table WHERE (competences = 1
AND niveau = 4) OR (competences = 2 AND niveau = 3);
Normalemenent ça marche !

Via :)

"jeorme" a écrit dans le message de
news:%
> Bonjour à tous,
>
> petite colle en SQL
>
> j'ai une table sous cette forme:
>
> empl_nom competences niveau
> DUPOND 1 4
> DUPOND 1 2
> DURAND 1 4
> DURAND 2 3
> DURAND 3 2
>
> je voudrais que grace à un miracle SQL (j'y ai séché tout l'après midi)
que
> ma requete sorte les personnes dont :
> - la competence 1 à un niveau 4 et que la competence 2 a un niveau 3
>
> résultat:
>
> empl_nom competences niveau
> DURAND 1 4
> DURAND 2 3
>
>
>
> Merci d'avance
>
>
>
>
>
>




Avatar
jeorme
merci mais dans ce cas DUPOND apparaît également
a écrit dans le message de news:
c6of0n$dcj$
Bonjour,

... where (competences = 1 AND niveau = 4) OR (competences = 2 AND niveau


> 3)

c'est pas sa que tu veux ?
où j'ai mal compris.

- Gilles -


"jeorme" a écrit dans le message de news:
#
> Bonjour à tous,
>
> petite colle en SQL
>
> j'ai une table sous cette forme:
>
> empl_nom competences niveau
> DUPOND 1 4
> DUPOND 1 2
> DURAND 1 4
> DURAND 2 3
> DURAND 3 2
>
> je voudrais que grace à un miracle SQL (j'y ai séché tout l'après midi)
que
> ma requete sorte les personnes dont :
> - la competence 1 à un niveau 4 et que la competence 2 a un niveau 3
>
> résultat:
>
> empl_nom competences niveau
> DURAND 1 4
> DURAND 2 3
>
>
>
> Merci d'avance
>
>
>
>
>
>




Avatar
Patrice
Ah ok, c'est en même temps.

Il y a plusieurs façons. Je ferais quelque chose comme :

-- Toutes les personnes
SELECT * FROM Personnes
- Récupérer la compétence 1 de la personne
JOIN Compétences AS Compétence1 ON Compétence1.Personne_fk=Personne_pk AND
Compétence1.Compétence=1
-- Récupérer la compétence 2 de la personne
JOIN Compétences AS Compérence2 ON Compétence2.Personne_fk=Personne_pk AND
Compétence2.Compétence=4
-- Niveau 4 pour la compétence 1 et niveau 3 pour la compétence 3
WHERE Compétence1.Niveau=4 AND Compétence2.Niveau=3

Ou encore

SELECT * FROM Personnes WHERE
EXISTS(SELECT 1 FROM Compétence WHERE Personne_fk=Personne_pk AND
Compétence=1 AND Niveau=4)
AND EXISTS(SELECT 1 FROM Compétence WHERE Personne_fk=Personne_pk
Compétence=2 AND Niveau=3)

Pour ton résultat final, le texte laisse penser que tu veux les personnes
mais comme exemple tu mets une ligne par personne par compétence trouvé. Il
faut adapter si besoin

Patrice


"jeorme" a écrit dans le message de
news:
merci mais désolé car dans ce cas DUPOND apparaît quand même !!
"Via" a écrit dans le message de news:

> Bonjour Jérôme.
>
> Pour moi ça doit donner un truc du genre :
> SELECT empl_nom, competences, niveau FROM Nom_Table WHERE (competences 1
> AND niveau = 4) OR (competences = 2 AND niveau = 3);
> Normalemenent ça marche !
>
> Via :)
>
> "jeorme" a écrit dans le message de
> news:%
> > Bonjour à tous,
> >
> > petite colle en SQL
> >
> > j'ai une table sous cette forme:
> >
> > empl_nom competences niveau
> > DUPOND 1 4
> > DUPOND 1 2
> > DURAND 1 4
> > DURAND 2 3
> > DURAND 3 2
> >
> > je voudrais que grace à un miracle SQL (j'y ai séché tout l'après


midi)
> que
> > ma requete sorte les personnes dont :
> > - la competence 1 à un niveau 4 et que la competence 2 a un niveau 3
> >
> > résultat:
> >
> > empl_nom competences niveau
> > DURAND 1 4
> > DURAND 2 3
> >
> >
> >
> > Merci d'avance
> >
> >
> >
> >
> >
> >
>
>




Avatar
Steve Kass
select distinct empl_nom from T T1
where not exists (
select * from (
select 1 c, 4 n
union all
select 2, 3
) C
where not exists (
select * from T T2
where T2.empl_nom = T1.empl_nom
and C.c = T2.competences
and C.n = T2.niveau
)
)

Autre solution:

select empl_nom from T
where (
(competences = 1 and niveau = 4)
or (competences = 2 and niveau = 3)
) group by empl_nom
having count(*) = 2

Ici, si une des paires (competences, niveau) peut se trouver 2 fois ou
plus dans la table, essayez
having count(distinct competences*1000 + niveau) = 2

Steve Kass
Drew University

jeorme wrote:

Bonjour à tous,

petite colle en SQL

j'ai une table sous cette forme:

empl_nom competences niveau
DUPOND 1 4
DUPOND 1 2
DURAND 1 4
DURAND 2 3
DURAND 3 2

je voudrais que grace à un miracle SQL (j'y ai séché tout l'après midi) que
ma requete sorte les personnes dont :
- la competence 1 à un niveau 4 et que la competence 2 a un niveau 3

résultat:

empl_nom competences niveau
DURAND 1 4
DURAND 2 3



Merci d'avance










Avatar
alex
Salut,
Voici une solution :
--------------
SELECT *
FROM (SELECT *
FROM TABLE
WHERE ((Comp = 1) AND (Niv = 4)) OR
((Comp = 2) AND (Niv = 3)))
WHERE (Nom IN
(SELECT Nom
FROM TABLE
WHERE ((Comp = 1) AND (Niv = 4)))) AND (Nom
IN
(SELECT Nom
FROM TABLE
WHERE (Comp = 2) AND (Niv = 3)))
-----------
@+
Bonne soirée

"jeorme" a écrit dans le message de
news:%
Bonjour à tous,

petite colle en SQL

j'ai une table sous cette forme:

empl_nom competences niveau
DUPOND 1 4
DUPOND 1 2
DURAND 1 4
DURAND 2 3
DURAND 3 2

je voudrais que grace à un miracle SQL (j'y ai séché tout l'après midi)


que
ma requete sorte les personnes dont :
- la competence 1 à un niveau 4 et que la competence 2 a un niveau 3

résultat:

empl_nom competences niveau
DURAND 1 4
DURAND 2 3



Merci d'avance








Avatar
bertrand david
jeorme wrote:
Bonjour à tous,

petite colle en SQL

j'ai une table sous cette forme:

empl_nom competences niveau
DUPOND 1 4
DUPOND 1 2
DURAND 1 4
DURAND 2 3
DURAND 3 2

je voudrais que grace à un miracle SQL (j'y ai séché tout l'après midi) que
ma requete sorte les personnes dont :
- la competence 1 à un niveau 4 et que la competence 2 a un niveau 3

résultat:

empl_nom competences niveau
DURAND 1 4
DURAND 2 3



Merci d'avance









Peut-être ça :
(SELECT * FROM empl_nom WHERE competences=1 AND niveau=4) UNION (SELECT
* FROM empl_nom WHERE competences=2 AND niveau=3)

Bertrand David
Avatar
Rebreyend Cyril
Bonjour,

Soit je n'ai pas bien compris la question, soit la reponse est ci-dessous:

SELECT * FROM [nom_de_la_table]
WHERE (competences = 1 AND niveau=4) OR (competences = 2 AND niveau=3)


Cordialement,
Cyril Rebreyend



"bertrand david" a écrit dans le message de
news:40a865b0$0$31383$
jeorme wrote:
> Bonjour à tous,
>
> petite colle en SQL
>
> j'ai une table sous cette forme:
>
> empl_nom competences niveau
> DUPOND 1 4
> DUPOND 1 2
> DURAND 1 4
> DURAND 2 3
> DURAND 3 2
>
> je voudrais que grace à un miracle SQL (j'y ai séché tout l'après midi)


que
> ma requete sorte les personnes dont :
> - la competence 1 à un niveau 4 et que la competence 2 a un niveau 3
>
> résultat:
>
> empl_nom competences niveau
> DURAND 1 4
> DURAND 2 3
>
>
>
> Merci d'avance
>
>
>
>
>
>

Peut-être ça :
(SELECT * FROM empl_nom WHERE competences=1 AND niveau=4) UNION (SELECT
* FROM empl_nom WHERE competences=2 AND niveau=3)

Bertrand David