Oracle.
Malheureusement ton lien ne fait pas la meme chose - le gars cherche a compter les paires distinctes, et non pas les valeurs uniques presentes dans deux colonnes differentes a la fois.
ddr555 a écrit :
quelle est la raison pour laquelle tu ne veux pas de sous requête ?
|
En gros, c'est dans une procedure stockee, et il y a une requete du genre (en tres tres simplifie):
SELECT <champs divers>
FROM <tout un tas de tables avec JOINs qui vont bien>
WHERE ([condition]) |
La condition dans le where est "parametrable": la requete est declaree comme VARCHAR2, et [condition] est remplace dynamiquement par une autre chaine de caractere stockee en base, et apres remplacement, le code fait un EXECUTE IMMEDIATE.
Il y a deja une condition (relativement simple) en place et on m'a demande de voir si c'etait possible d'y ajouter facilement un certain nombre de criteres. Si je peux le faire en modifiant la condition, je m'en sors avec un UPDATE sur un champ en base et c'est "facile". Si je peux pas et que je dois reecrire la procedure stockee ou autre, ca devient super casse couilles a cause des process de ma boite: oblige de tout documenter, tester, faire valider, etc.
Maintenant le probleme c'est que un des criteres a besoin de faire ce COUNT de mon premier post, pour avoir un truc dans le genre:
SELECT <champs divers>
FROM <tout un tas de tables avec JOINs qui vont bien>
WHERE (SELECT COUNT(*)
FROM (
SELECT champ1
FROM table
WHERE champ3 = <parametre>
UNION
SELECT champ2
FROM table
WHERE champ3 = <parametre>
) < 200) |
Sauf que le <parametre> est en fait un des champs de la requete initiale, accede sous la forme alias.champ.
Et ce genre d'access ne marche que si la reference est faite au "premier niveau" dans la sous-requete.
Bon il y a p'tetre une astuce que je ne connais pas pour pouvoir y acceder dans les sous-niveaux.
J'ai reussi a avoir un truc qui marche, toujours avec une sous-requete mais en deplacant la comparaison avec champ3 au "premier" niveau, mais bon niveau perf c'est une horreur pour le moment. Je vais quand meme essayer de bidouiller quelques hints pour voir.
---------------
C'était vraiment très intéressant.