Bonjour,
Mon probleme concerne l'optimalité d'une de mes requêtes sur Postgresql 8.2 :

J'ai une table dans laquelle il y a 2 colonnes A et B.
J'aimerais, pour un ensemble de A, avoir le B si il vaut une valeur donné, ou rien si il n'y a pas.

La requête de base serait :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
(SELECT A, B FROM table WHERE A IN(1,2,3) AND B = '2007-05-05')
UNION
(SELECT A, NULL FROM table WHERE A IN(1,2,3) AND NOT EXISTS(SELECT * FROM table WHERE A IN(1,2,3)AND B='2007-05-05'));
 
Je devrais par exemple avoir : 
---------------
A | B
---------------
1 | 2007-05-05
2 | 
3 |
---------------
Mais ça me semble bien compliqué : je doute qu'une recherche sur 3 tables (3 select) pour cette requête soit optimal, surtout si cette table est grande. Avez-vous d'autres propositions ou est-ce la meilleure?

Autre chose : J'ai vu dans un post qu'il fallait éviter les OR et utiliser les IN. Pourquoi les performances sont-elles meilleures? Ca vaut le coup de faire la négation avec des NAND quand on a que des OR?

3eme question : Je pense avoir besoin d'une requête du style "A=1 AND B='2005-05-05' OR A=4 AND B='2007-07-07' OR .... une 50e de fois ...". Quelle serait la bonne demarche à faire?

ps : je post dans le forum postgresql pour des optimisations eventuelles liée à postgres