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

Probleme d'écriture d'une requete

5 réponses
Avatar
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

5 réponses

Avatar
Rudi Bruchez
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/
Avatar
jack
Merci.

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

"Rudi Bruchez" <rudi#nospam#at#babaluga.com> wrote in message
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/


Avatar
Philippe TROTIN [MS]
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" a écrit dans le message de groupe de discussion :
O7JwEp$
Merci.

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

"Rudi Bruchez" <rudi#nospam#at#babaluga.com> wrote in message
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/






Avatar
jack
Merci

"Philippe TROTIN [MS]" wrote in message
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" a écrit dans le message de groupe de discussion :
O7JwEp$
> Merci.
>
> Malheureusement pour moi je suis en 2000.
> Y a-t-il une solution ?
>
> "Rudi Bruchez" <rudi#nospam#at#babaluga.com> wrote in message
> 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/
>
>


Avatar
Philippe TROTIN [MS]
Bonsoir,

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

Heureux de vous avoir aidé.

Cordialement
_______________________________

Philippe TROTIN
Microsoft Services France
_______________________________

"jack" a écrit dans le message de groupe de discussion :
#
Merci

"Philippe TROTIN [MS]" wrote in message
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" a écrit dans le message de groupe de discussion :
O7JwEp$
> Merci.
>
> Malheureusement pour moi je suis en 2000.
> Y a-t-il une solution ?
>
> "Rudi Bruchez" <rudi#nospam#at#babaluga.com> wrote in message
> 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/
>
>