Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/01/2011, 11h11   #1
Membre Expert
 
Inscription : janvier 2006
Messages : 1 111
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 1 111
Points : 1 093
Points : 1 093
Par défaut Conditions OR multiples

Bonjour,

J'ai une requête du type :
Code :
1
2
3
4
5
6
7
8
9
SELECT ...
FROM ...
WHERE IdArticle = X1 AND IdFournisseur = Y1
OR IdArticle = X2 AND IdFournisseur = Y2
OR IdArticle = X3 AND IdFournisseur = Y3
OR IdArticle = X4 AND IdFournisseur = Y4
OR IdArticle = X5 AND IdFournisseur = Y5
...
OR IdArticle = Xx AND IdFournisseur = Yy
Y-a-t-il moyen de faire plus court et plus efficace ?

Merci.
__________________
[Access] Les bases du débogage => ici
Kloun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2011, 11h20   #2
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Bonjour

D'ou viennent X1, Y1,X2,Y2,...

est-ce des valeurs en dur(donc a mettre en simple quotes...)
ou est-ce qu'elles proviennent d'autres tables ?
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2011, 12h07   #3
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
S'il s'agit de valeurs en dur, vous pouvez faire comme ceci a partir de la version 2008 qui prend en charge les constructeurs de lignes valuées

Code sql :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
SELECT ...
FROM MaTable
INNER JOIN (VALUES
	('X1', 'Y1'),
	('X2', 'Y2'),
	('X3', 'Y3'),
	('X4', 'Y4'),
	...
	('Xx', 'Yy')
) AS tmp(IdArticle, IdFournisseur)
ON MaTable.IDArticle = tmp.IDArticle 
AND MaTable.IdFournisseur = tmp.IdFournisseur

et comme cela pour les versions anterieures
Code sql :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
SELECT ...
FROM MaTable
INNER JOIN (
	SELECT 'X1', 'Y1' UNION ALL
	SELECT 'X2', 'Y2' UNION ALL
	SELECT 'X3', 'Y3' UNION ALL
	SELECT 'X4', 'Y4' UNION ALL
	...
	SELECT 'Xx', 'Yy'
) AS tmp(IdArticle, IdFournisseur)
ON MaTable.IDArticle = tmp.IDArticle 
AND MaTable.IdFournisseur = tmp.IdFournisseur
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2011, 14h33   #4
Membre Expert
 
Inscription : janvier 2006
Messages : 1 111
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 1 111
Points : 1 093
Points : 1 093
X1, ... , Yn, c'est des Id entiers, "en dur".

J'avais pas pensé à ces 2 possibilités.

Merci.
__________________
[Access] Les bases du débogage => ici
Kloun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2011, 15h25   #5
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
ou avec les CTE depuis 2005, mais qui revient au même (juste une différence d'écriture, peut être plus lisible...)

Code sql :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
WITH tmp(IdArticle, IdFournisseur) AS(
	SELECT 'X1', 'Y1' UNION ALL
	SELECT 'X2', 'Y2' UNION ALL
	SELECT 'X3', 'Y3' UNION ALL
	SELECT 'X4', 'Y4' UNION ALL
	...
	SELECT 'Xx', 'Yy'
) 
SELECT ...
FROM MaTable
INNER JOIN tmp 
    ON MaTable.IDArticle = tmp.IDArticle 
    AND MaTable.IdFournisseur = tmp.IdFournisseur
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h38.


 
 
 
 
Partenaires

Hébergement Web