Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
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 19/05/2011, 10h04   #1
Nouveau Membre du Club
 
Inscription : janvier 2007
Messages : 141
Détails du profil
Informations personnelles :
Âge : 27
Localisation : Tunisie

Informations forums :
Inscription : janvier 2007
Messages : 141
Points : 29
Points : 29
Par défaut Comment faire une clause where telle que a=1 et b=2

Bonjour,

j'ai une colonne A qui contient les champs a, b et une colonne B qui contient les champs 1, 2 avec 1, 2 sont les valeurs de a et b.
(a=1 et b=2).
et je ne sais pas comment traduire ça coté sql.
j'ai essayé avec :
Code :
1
2
 
WHERE A IN (a,b) AND B IN (1,2)
mais fait comme ca,ca ne voudrait pas dire que a= exactement 1,il peut être = 2 aussi.

merci d'avance pour vos réponses !

[Edit]
juste une remarque : les colonnes A et B sont d'une même table.
Halloula est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2011, 10h18   #2
Membre Expert
 
Avatar de pacmann
 
Homme Pacman Pacman
Business analyst
Inscription : juin 2004
Messages : 1 417
Détails du profil
Informations personnelles :
Nom : Homme Pacman Pacman
Âge : 31
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Business analyst
Secteur : Finance

Informations forums :
Inscription : juin 2004
Messages : 1 417
Points : 2 309
Points : 2 309
Salut,

Pas super clair ton truc... A contient des chaînes de caractères identifiant un type de valeur (ou variable), et B contient des numériques étant la valeur elle même ?

En attendant de comprendre exactement ce que tu cherches, je peux te proposer ça...
Code :
1
2
3
 
WHERE (A ='a' AND B = 1)
  OR (A ='b' AND B = 2)
__________________

(c'est ma photo)
Paku, Paku !
Pour les jeunes incultes : non, je ne suis pas un pokémon...

Le pacblog : http://pacmann.over-blog.com/
pacmann est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/05/2011, 10h25   #3
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 925
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 925
Points : 4 547
Points : 4 547
Citation:
Envoyé par pacmann Voir le message
En attendant de comprendre exactement ce que tu cherches, je peux te proposer ça...
Code :
1
2
3
 
WHERE (A ='a' AND B = 1)
  OR (A ='b' AND B = 2)

J'adore ton style ! c'est vrai qu'avec les ( ) AND et OR on peut résoudre très clairement ce que d'autre charlots font avec des NVL à se mordre le front.
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2011, 10h47   #4
Nouveau Membre du Club
 
Inscription : janvier 2007
Messages : 141
Détails du profil
Informations personnelles :
Âge : 27
Localisation : Tunisie

Informations forums :
Inscription : janvier 2007
Messages : 141
Points : 29
Points : 29
Salut,

non non, mon probleme n'est pas le numérique, mais le comment faire !

une Colonne A et une Colonne B ,dans A des attributs,dans B les valeurs à ses meme attribut :
par exemple dans la ligne 1 ,j'ai dans A : a et dans B b,=> b est la valeur de a.
dans ligne 2 dans A : d et dans B : c => c est la valeur de d.
ma question est comment faire pour selectionner à la fois la ligne 1 et 2 ?
je ne peux pas faire par exemple
Code :
1
2
 
WHERE A=a AND A=d AND WHERE B=b AND B=c
comme j'ai dit plus haut,j'ai essayé avec le where IN,mais ca ne me donnera pas exactement le a=b ou le d=c
Halloula est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2011, 11h01   #5
Membre Expert
 
Avatar de pacmann
 
Homme Pacman Pacman
Business analyst
Inscription : juin 2004
Messages : 1 417
Détails du profil
Informations personnelles :
Nom : Homme Pacman Pacman
Âge : 31
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Business analyst
Secteur : Finance

Informations forums :
Inscription : juin 2004
Messages : 1 417
Points : 2 309
Points : 2 309
Ben tu veux que les deux "couples" soient acceptés ?

Je réitère ma proposition... si ce n'est toujours pas ça, je te propose de nous donner une exemple avec création de table, insertion de valeur, résultats attendus pour qu'on soit sûr cette fois

(je reprends les exemples de ta dernière réponse cette fois)

Code :
1
2
3
 
WHERE (A =a AND B = b)
  OR (A =d AND B = c)
Laurent, je suis assez intéressé par la solution NVL, je vois pas du tout ce que ça peut donner

EDIT : tain j'ai tellement peur des priorités que j'avais même pas remarqué que j'avais pas besoin des parenthèses
__________________

(c'est ma photo)
Paku, Paku !
Pour les jeunes incultes : non, je ne suis pas un pokémon...

Le pacblog : http://pacmann.over-blog.com/
pacmann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2011, 11h53   #6
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 437
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 437
Points : 4 173
Points : 4 173
@pacmann.. voici une solution mais par decode
Code :
1
2
3
4
5
6
7
8
9
10
11
WITH t AS (SELECT 'a' AS a, 1 AS b FROM dual
UNION ALL SELECT 'b' AS a, 2 AS b FROM dual
UNION ALL SELECT 'c' AS a, 1 AS b FROM dual
)
SELECT *
FROM t
WHERE (A ='a' AND B = 1)  OR (A ='b' AND B = 2)
 
SELECT *
FROM t
WHERE decode(A, 'a', decode(b,1, 1, 0), 'b', decode(B,2,1,0), 0) = 1
Sinon, le () je le met aussi à chaque fois que j'ai des OR.. ça simplifie la relecture (je cherche souvent quel est l'ordre des AND OR)
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/05/2011, 11h59   #7
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 433
Points : 10 433
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
On peut aussi le faire en row constructor (ça devrait plaire à Laurent) :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
WITH t AS
(
SELECT 'a' AS a, 1 AS b FROM dual UNION ALL
SELECT 'b'     , 2      FROM dual UNION ALL
SELECT 'c'     , 1      FROM dual
)
SELECT *
  FROM t
 WHERE (A, B) IN (('a',1), ('b',2));
 
A          B
- ----------
a          1
b          2
Sinon comme vous, dès que je mélange AND et OR je mets des parenthèses.
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 19/05/2011, 13h07   #8
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 925
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 925
Points : 4 547
Points : 4 547
effectivement, c'est super séduisant
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2011, 13h33   #9
Membre Expert
 
Avatar de pacmann
 
Homme Pacman Pacman
Business analyst
Inscription : juin 2004
Messages : 1 417
Détails du profil
Informations personnelles :
Nom : Homme Pacman Pacman
Âge : 31
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Business analyst
Secteur : Finance

Informations forums :
Inscription : juin 2004
Messages : 1 417
Points : 2 309
Points : 2 309
Mignon McM... et est-ce que ça rentre dans : "More Code : More Bugs. Less Code : Less Bugs " ?

(Waldar quant à ta solution, j'aime bien le côté bataille navale )
__________________

(c'est ma photo)
Paku, Paku !
Pour les jeunes incultes : non, je ne suis pas un pokémon...

Le pacblog : http://pacmann.over-blog.com/
pacmann est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h35.


 
 
 
 
Partenaires

Hébergement Web