[Résolu]Problème avec requête SQL

Eléphanteau du PHP | 14 Messages

26 juil. 2005, 09:24

Bonjour,

Voyez vous quelquechose qui ne va pas avec cette requête SQL :

Code : Tout sélectionner

SELECT * FROM table1 A WHERE 1 < SELECT COUNT(*) FROM table2 B WHERE B.arg1 = A.arg1 AND B.arg2 = A.arg2


Je veux la passer dans DB2 et il me dit :
SQLCODE = -104, ERROR: ILLEGAL SYMBOL "COUNT".
Merci de votre aide.
Modifié en dernier par tebart le 26 juil. 2005, 11:18, modifié 1 fois.

Mammouth du PHP | 19672 Messages

26 juil. 2005, 09:46

Il faudrait voir dans la doc de DB2, on dirait qu'il aime pas le COUNT(*) : as-tu essayé en mettant le nom d'un champ au lieu de l'"*" ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 14 Messages

26 juil. 2005, 09:47

oui j'ai essayé et ça fait le même résultat.

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

26 juil. 2005, 09:58

Et le paramètre WHERE 1 sert à quoi ? (je ne connais pas DB2) et es-tu certain que tu puisses < ta seconde requête qui contient un count dans la 1ere (je ne vois pas de contre indication...) ?
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

ViPHP
pjl
ViPHP | 2119 Messages

26 juil. 2005, 10:01

y'a belle lurette que je n'utilise plus DB2.
Pour commencer, je testerais la requête par morceau ensuite, j'ai un doute sur le fait que DB2 accepte les sous-requêtes.

Eléphanteau du PHP | 14 Messages

26 juil. 2005, 10:10

je ne veux trouver les enregistrements qui ont plusieurs lignes avec arg1 et arg2 qui sont identiques.

c'est possible avec SQL en faisant ce genre de requête. Mais je sais qu'elles sont très capricieuses et que parfois ça n'est pas évident de trouver pourquoi elle passe pas.

Eléphanteau du PHP | 14 Messages

26 juil. 2005, 10:14

DB2 accepte les sous requêtes.

Mammouth du PHP | 19672 Messages

26 juil. 2005, 10:16

Je suis pas certain de mon affaire mais j,aouterais deux choses dans ta requête de base (sans garantie et non testé, je n'ai pas DB2 sur ma machine :

Code : Tout sélectionner

SELECT * FROM table1 A, table2 B WHERE 1 < (SELECT COUNT(*) FROM B WHERE B.arg1 = A.arg1 AND B.arg2 = A.arg2)
Déplacement dans le FROM de la seconde table et ajout de parenthèses.

Ceci dit, cette requête est curieuse quand même... :-k
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

26 juil. 2005, 10:16

La sous-requete fonctionne-t-elle seule ?

et :lol: ce ne sont pas les requêtes qui sont capricieuses, hein !
Si cela ne fonctionne pas, c'est bien de TA faute, pas de la notre. Ton ordi fait ce que TU lui dis de faire.

ViPHP
pjl
ViPHP | 2119 Messages

26 juil. 2005, 10:27

Dire que mon DBII tournait sous CP/M. :roll:

Eléphanteau du PHP | 14 Messages

26 juil. 2005, 10:32

cyrano> ça ne fonctionne pas non plus, merci pour l'idée

mere-teresa> quand je dis "ces requêtes sont capricieuses" je veux juste dire que leur syntaxe est très précise, par exemple qu'il ne faut pas mettre le > 1 à la fin mais bien 1 < au début de la sous requête alors qu'à priori on pourrait être tenté de croire que les deux sens marchent. Je sais bien que c'est la requête qui est pas bonne et pas l'ordi...

Petite précision : table1 et table2 sont la même table. Peut être voyez vous un autre moyen de faire ce que je veux ?

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

26 juil. 2005, 10:43

http://www.wangz.net/cgi-bin/pp/gsqlpar ... format.tpl si ça peut t'aider...mais c'est juste pour du formatage.
Bon, comme erreur il te parle de COUNT, d'où ma question : est-ce que ta sous-requête fonctionne seule ?

Sinon tu veux SELECTionner toutes les lignes où arg1 = arg2 et qui ont le même nom ? (plusieurs résultats pour un seul nom ?)

Eléphanteau du PHP | 14 Messages

26 juil. 2005, 10:54

non je veux sélectionner les lignes qui ont plusieurs lignes avec le même couple arg1,arg2. ex :

table1
clef1 clef2 arg1 arg2
---------------------------------
toto tata val1 val2
titi tutu val1 val2
tete teti val3 val4
tita totu val3 val4
tito tuto val3 val4

mais une ligne comme :
tita totu val5 val6

ne m'intéresse pas s'il n'y a pas d'autres lignes avec val5 et val6.

Tu as compris ?

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

26 juil. 2005, 10:56

Tu veux toutes les lignes qui ont les mêmes arg1 et arg2 ?

Eléphanteau du PHP | 14 Messages

26 juil. 2005, 10:59

c'est ça oui.

ton lien m'a effectivement aidé. Il m'a donné la requête suivante :

Code : Tout sélectionner

SELECT * FROM table1 A WHERE 1 < (SELECT COUNT(*) FROM table1 B WHERE B.arg1 = A.arg1 AND B.arg2 = A.arg2)
il a ajouté les parenthèses et ça à l'air de marcher. Il me revient aucun résultat ce qui m'étonne mais ne plante pas.

J'avais pourtant testé avec les parenthèses mais sans aligner de la sorte ma requête. Serait ce l'alignement qui joue sur le plantage ?