[Oracle] Optimisation requete avec UNION

Optimisation requete avec UNION [Oracle] - SQL/NoSQL - Programmation

Marsh Posté le 18-07-2011 à 09:26:44    

Bonjour,
 
Je dois faire une requête avec une clause where sur 2 champs. Le problème est que je dois faire 3 combinaisons sur ces 2 champs. Voici la première requête que j'ai essaye :

Code :
  1. SELECT *
  2. FROM matable
  3. WHERE (champ1 = 'test1' AND champ2 = 3) OR (champ1 = 'test2' AND champ2 = 5) OR (champ1 = 'test3' AND champ2 = 1)


 
Cette requête n'a pas fonctionnée, je me suis donc tourne vers UNION, mais je ne suis pas satisfait de cette méthode :

Code :
  1. SELECT *
  2. FROM matable
  3. WHERE champ1 = 'test1' AND champ2 = 3
  4. UNION
  5. SELECT *
  6. FROM matable
  7. WHERE champ1 = 'test2' AND champ2 = 5
  8. UNION
  9. SELECT *
  10. FROM matable
  11. WHERE champ1 = 'test3' AND champ2 = 1


 
N'existerai pas une meilleure solution pour mettre en place cette formule ?

Reply

Marsh Posté le 18-07-2011 à 09:26:44   

Reply

Marsh Posté le 19-07-2011 à 09:29:29    

Les deux codes sont valides mais le premier est plus élégant il me semble. Quel est le problème?


---------------
Google isn't making us stupider, it's simply making us realise that omniscience is actually slightly boring. (Douglas Copland)
Reply

Marsh Posté le 19-07-2011 à 13:25:25    

J'suis d'accord avec furie gastrique, le premier code devrait marcher.

 

Sinon ca aussi ca devrait marcher:

SELECT *
FROM matable
WHERE (champ1,champ2) in (('test1',3),('test2',5),('test3',1));


Message édité par lasnoufle le 19-07-2011 à 13:26:24

---------------
C'était vraiment très intéressant.
Reply

Marsh Posté le 19-07-2011 à 17:18:27    

Curieux de savoir pourquoi la premiere requete n'as pas marche.  
L'optimisation de requetes en mettant des unions a la place de or est une technique completement depassee de nos jours et souvent la version avec les or est plus performante sur les moteurs de BDD actuels.
En primes, tu as fait l'effort de correctement parentheser ton code (un plus a mon avis) alors que sans parentheses, ca voudrait dire la meme chose (and plus prioritaire que or).

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed