Probleme d'écriture d'une requete

Le
jack
Bonjour,

J'ai une requete que je ne parviens pas à écrire.

1 table combinaison
combi_id int
combi_nom varchar(20)

1 table combinaison_ligne
combi_id int
ligne_valeur varchar(20)


Avec des données du genre
table combinaison
1 combinaison_1
2 combinaison_2
3 combinaison_3

Table combinaison_ligne
1 valeur1
1 valeur 2

2 valeur3
2 valeur1

3 valeur1
3 valeur2
3 valeur3

Comment faire pour retrouver la combinaison qui ne contient que valeur1 et
valeur2 ?

J'espère avoir été clair

Merci
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Rudi Bruchez
Le #11883101
Bonjour,

jack a écrit:

Comment faire pour retrouver la combinaison qui ne contient que valeur1 et
valeur2 ?



Pour la prochaine fois, merci de :
1) préparer le DML des tables pour que nous n'ayons pas à le faire
nous-mêmes
2) indiquer ta version de SQL Server.

Ceci fonctionne en 2005 :

USE tempdb
GO

CREATE TABLE combinaison (
combi_id int,
combi_nom varchar(20)
)
GO

CREATE TABLE combinaison_ligne (
combi_id int,
ligne_valeur varchar(20)
)
GO

INSERT INTO combinaison VALUES (1, 'combinaison_1')
INSERT INTO combinaison VALUES (2, 'combinaison_2')
INSERT INTO combinaison VALUES (3, 'combinaison_3')

INSERT INTO combinaison_ligne VALUES (1, 'valeur1')
INSERT INTO combinaison_ligne VALUES (1, 'valeur2')

INSERT INTO combinaison_ligne VALUES (2, 'valeur3')
INSERT INTO combinaison_ligne VALUES (2, 'valeur1')

INSERT INTO combinaison_ligne VALUES (3, 'valeur1')
INSERT INTO combinaison_ligne VALUES (3, 'valeur2')
INSERT INTO combinaison_ligne VALUES (3, 'valeur3')
GO


SELECT combi_id
FROM combinaison_ligne
WHERE ligne_valeur = 'valeur1'
INTERSECT
SELECT combi_id
FROM combinaison_ligne
WHERE ligne_valeur = 'valeur2'
INTERSECT
SELECT combi_id
FROM combinaison_ligne
GROUP BY combi_id
HAVING count(*) = 2

--
Rudi Bruchez
Consultant independant, MCDBA, MCITP, MCT, MVP SQL Server
http://www.babaluga.com/
http://rudi.developpez.com/
jack
Le #11883081
Merci.

Malheureusement pour moi je suis en 2000.
Y a-t-il une solution ?

"Rudi Bruchez" news:uA$ixx%
Bonjour,

jack a écrit:

> Comment faire pour retrouver la combinaison qui ne contient que valeur1


et
> valeur2 ?

Pour la prochaine fois, merci de :
1) préparer le DML des tables pour que nous n'ayons pas à le faire
nous-mêmes
2) indiquer ta version de SQL Server.

Ceci fonctionne en 2005 :

USE tempdb
GO

CREATE TABLE combinaison (
combi_id int,
combi_nom varchar(20)
)
GO

CREATE TABLE combinaison_ligne (
combi_id int,
ligne_valeur varchar(20)
)
GO

INSERT INTO combinaison VALUES (1, 'combinaison_1')
INSERT INTO combinaison VALUES (2, 'combinaison_2')
INSERT INTO combinaison VALUES (3, 'combinaison_3')

INSERT INTO combinaison_ligne VALUES (1, 'valeur1')
INSERT INTO combinaison_ligne VALUES (1, 'valeur2')

INSERT INTO combinaison_ligne VALUES (2, 'valeur3')
INSERT INTO combinaison_ligne VALUES (2, 'valeur1')

INSERT INTO combinaison_ligne VALUES (3, 'valeur1')
INSERT INTO combinaison_ligne VALUES (3, 'valeur2')
INSERT INTO combinaison_ligne VALUES (3, 'valeur3')
GO


SELECT combi_id
FROM combinaison_ligne
WHERE ligne_valeur = 'valeur1'
INTERSECT
SELECT combi_id
FROM combinaison_ligne
WHERE ligne_valeur = 'valeur2'
INTERSECT
SELECT combi_id
FROM combinaison_ligne
GROUP BY combi_id
HAVING count(*) = 2

--
Rudi Bruchez
Consultant independant, MCDBA, MCITP, MCT, MVP SQL Server
http://www.babaluga.com/
http://rudi.developpez.com/


Philippe TROTIN [MS]
Le #11882961
On reprend les mêmes tables que celles de Rudi :


SELECT * FROM combinaison
WHERE combi_id IN (
SELECT combi_id
FROM combinaison_ligne
WHERE ligne_valeur = 'valeur1' or ligne_valeur = 'valeur2'
GROUP BY combi_id
HAVING count(*) = 2 )
AND combi_id NOT IN (
SELECT combi_id
FROM combinaison_ligne
WHERE ligne_valeur NOT IN ('valeur1', 'valeur2'))


Cordialement
_______________________________

Philippe TROTIN
Microsoft Services France
_______________________________

"jack" O7JwEp$
Merci.

Malheureusement pour moi je suis en 2000.
Y a-t-il une solution ?

"Rudi Bruchez" news:uA$ixx%
Bonjour,

jack a écrit:

> Comment faire pour retrouver la combinaison qui ne contient que valeur1


et
> valeur2 ?

Pour la prochaine fois, merci de :
1) préparer le DML des tables pour que nous n'ayons pas à le faire
nous-mêmes
2) indiquer ta version de SQL Server.

Ceci fonctionne en 2005 :

USE tempdb
GO

CREATE TABLE combinaison (
combi_id int,
combi_nom varchar(20)
)
GO

CREATE TABLE combinaison_ligne (
combi_id int,
ligne_valeur varchar(20)
)
GO

INSERT INTO combinaison VALUES (1, 'combinaison_1')
INSERT INTO combinaison VALUES (2, 'combinaison_2')
INSERT INTO combinaison VALUES (3, 'combinaison_3')

INSERT INTO combinaison_ligne VALUES (1, 'valeur1')
INSERT INTO combinaison_ligne VALUES (1, 'valeur2')

INSERT INTO combinaison_ligne VALUES (2, 'valeur3')
INSERT INTO combinaison_ligne VALUES (2, 'valeur1')

INSERT INTO combinaison_ligne VALUES (3, 'valeur1')
INSERT INTO combinaison_ligne VALUES (3, 'valeur2')
INSERT INTO combinaison_ligne VALUES (3, 'valeur3')
GO


SELECT combi_id
FROM combinaison_ligne
WHERE ligne_valeur = 'valeur1'
INTERSECT
SELECT combi_id
FROM combinaison_ligne
WHERE ligne_valeur = 'valeur2'
INTERSECT
SELECT combi_id
FROM combinaison_ligne
GROUP BY combi_id
HAVING count(*) = 2

--
Rudi Bruchez
Consultant independant, MCDBA, MCITP, MCT, MVP SQL Server
http://www.babaluga.com/
http://rudi.developpez.com/






jack
Le #11882911
Merci

"Philippe TROTIN [MS]" news:
On reprend les mêmes tables que celles de Rudi :


SELECT * FROM combinaison
WHERE combi_id IN (
SELECT combi_id
FROM combinaison_ligne
WHERE ligne_valeur = 'valeur1' or ligne_valeur = 'valeur2'
GROUP BY combi_id
HAVING count(*) = 2 )
AND combi_id NOT IN (
SELECT combi_id
FROM combinaison_ligne
WHERE ligne_valeur NOT IN ('valeur1', 'valeur2'))


Cordialement
_______________________________

Philippe TROTIN
Microsoft Services France
_______________________________

"jack" O7JwEp$
> Merci.
>
> Malheureusement pour moi je suis en 2000.
> Y a-t-il une solution ?
>
> "Rudi Bruchez" > news:uA$ixx%
>> Bonjour,
>>
>> jack a écrit:
>>
>> > Comment faire pour retrouver la combinaison qui ne contient que


valeur1
> et
>> > valeur2 ?
>>
>> Pour la prochaine fois, merci de :
>> 1) préparer le DML des tables pour que nous n'ayons pas à le faire
>> nous-mêmes
>> 2) indiquer ta version de SQL Server.
>>
>> Ceci fonctionne en 2005 :
>>
>> USE tempdb
>> GO
>>
>> CREATE TABLE combinaison (
>> combi_id int,
>> combi_nom varchar(20)
>> )
>> GO
>>
>> CREATE TABLE combinaison_ligne (
>> combi_id int,
>> ligne_valeur varchar(20)
>> )
>> GO
>>
>> INSERT INTO combinaison VALUES (1, 'combinaison_1')
>> INSERT INTO combinaison VALUES (2, 'combinaison_2')
>> INSERT INTO combinaison VALUES (3, 'combinaison_3')
>>
>> INSERT INTO combinaison_ligne VALUES (1, 'valeur1')
>> INSERT INTO combinaison_ligne VALUES (1, 'valeur2')
>>
>> INSERT INTO combinaison_ligne VALUES (2, 'valeur3')
>> INSERT INTO combinaison_ligne VALUES (2, 'valeur1')
>>
>> INSERT INTO combinaison_ligne VALUES (3, 'valeur1')
>> INSERT INTO combinaison_ligne VALUES (3, 'valeur2')
>> INSERT INTO combinaison_ligne VALUES (3, 'valeur3')
>> GO
>>
>>
>> SELECT combi_id
>> FROM combinaison_ligne
>> WHERE ligne_valeur = 'valeur1'
>> INTERSECT
>> SELECT combi_id
>> FROM combinaison_ligne
>> WHERE ligne_valeur = 'valeur2'
>> INTERSECT
>> SELECT combi_id
>> FROM combinaison_ligne
>> GROUP BY combi_id
>> HAVING count(*) = 2
>>
>> --
>> Rudi Bruchez
>> Consultant independant, MCDBA, MCITP, MCT, MVP SQL Server
>> http://www.babaluga.com/
>> http://rudi.developpez.com/
>
>


Philippe TROTIN [MS]
Le #11882821
Bonsoir,

Tant que c'est du T-SQL, j'aime bien :-)

Heureux de vous avoir aidé.

Cordialement
_______________________________

Philippe TROTIN
Microsoft Services France
_______________________________

"jack" #
Merci

"Philippe TROTIN [MS]" news:
On reprend les mêmes tables que celles de Rudi :


SELECT * FROM combinaison
WHERE combi_id IN (
SELECT combi_id
FROM combinaison_ligne
WHERE ligne_valeur = 'valeur1' or ligne_valeur = 'valeur2'
GROUP BY combi_id
HAVING count(*) = 2 )
AND combi_id NOT IN (
SELECT combi_id
FROM combinaison_ligne
WHERE ligne_valeur NOT IN ('valeur1', 'valeur2'))


Cordialement
_______________________________

Philippe TROTIN
Microsoft Services France
_______________________________

"jack" O7JwEp$
> Merci.
>
> Malheureusement pour moi je suis en 2000.
> Y a-t-il une solution ?
>
> "Rudi Bruchez" > news:uA$ixx%
>> Bonjour,
>>
>> jack a écrit:
>>
>> > Comment faire pour retrouver la combinaison qui ne contient que


valeur1
> et
>> > valeur2 ?
>>
>> Pour la prochaine fois, merci de :
>> 1) préparer le DML des tables pour que nous n'ayons pas à le faire
>> nous-mêmes
>> 2) indiquer ta version de SQL Server.
>>
>> Ceci fonctionne en 2005 :
>>
>> USE tempdb
>> GO
>>
>> CREATE TABLE combinaison (
>> combi_id int,
>> combi_nom varchar(20)
>> )
>> GO
>>
>> CREATE TABLE combinaison_ligne (
>> combi_id int,
>> ligne_valeur varchar(20)
>> )
>> GO
>>
>> INSERT INTO combinaison VALUES (1, 'combinaison_1')
>> INSERT INTO combinaison VALUES (2, 'combinaison_2')
>> INSERT INTO combinaison VALUES (3, 'combinaison_3')
>>
>> INSERT INTO combinaison_ligne VALUES (1, 'valeur1')
>> INSERT INTO combinaison_ligne VALUES (1, 'valeur2')
>>
>> INSERT INTO combinaison_ligne VALUES (2, 'valeur3')
>> INSERT INTO combinaison_ligne VALUES (2, 'valeur1')
>>
>> INSERT INTO combinaison_ligne VALUES (3, 'valeur1')
>> INSERT INTO combinaison_ligne VALUES (3, 'valeur2')
>> INSERT INTO combinaison_ligne VALUES (3, 'valeur3')
>> GO
>>
>>
>> SELECT combi_id
>> FROM combinaison_ligne
>> WHERE ligne_valeur = 'valeur1'
>> INTERSECT
>> SELECT combi_id
>> FROM combinaison_ligne
>> WHERE ligne_valeur = 'valeur2'
>> INTERSECT
>> SELECT combi_id
>> FROM combinaison_ligne
>> GROUP BY combi_id
>> HAVING count(*) = 2
>>
>> --
>> Rudi Bruchez
>> Consultant independant, MCDBA, MCITP, MCT, MVP SQL Server
>> http://www.babaluga.com/
>> http://rudi.developpez.com/
>
>






Publicité
Poster une réponse
Anonyme