Problème avec l'opérateur !=

Mammouth du PHP | 693 Messages

04 avr. 2007, 16:24

Bonjour, j'ai deux table, hier et maintenant, avec chacune deux champs, nom et ville.

Mon but est de trouver les déplacements, c'est à dire les nom qui sont associé à des villes différentes dans les deux tables.

J'ai donc la requete :

Code : Tout sélectionner

H.nom FROM hier H LEFT OUTER JOIN maintenant M ON H.nom = M.nom WHERE M.ville!=H.ville
Mais cette requete me revoie rien, alors que dans ma BDD, j'ai pourtant des noms associé à des villes différentes dans les deux tables...

Mammouth du PHP | 19672 Messages

04 avr. 2007, 17:25

Note :
"différent" s'écrit :
- en PHP: "!="
- en JavaScript : "!="
- en SQL : "<>"

Corrige et refais l'essai :-k
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 693 Messages

04 avr. 2007, 17:44

POurtant j'utilise tout le temps != dans mes autres requets et ca marche...

Même en chageant l'opérateur, ca marche pas...

Mammouth du PHP | 19672 Messages

04 avr. 2007, 18:04

Alors mets nous la structure des tables avec quelques lignes de données exemples et par la suite ajoute un exemple de la sortie attendue par rapport aux exemples donnés, ça simplifiera énormément pour te répondre.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 693 Messages

04 avr. 2007, 18:19

table hier :

Code : Tout sélectionner

nom ville a Thouars b Poitiers c Thouars
table maintenant :

Code : Tout sélectionner

nom ville a Poitiers b Poitiers
Le résultat devrait être

Code : Tout sélectionner

a Thouars a Poitiers c Thouars NULL NULL
Car b est toujours dans la même ville et c a disparu.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

05 avr. 2007, 11:09

Et pourquoi ne pas mettre ta clause directement dans la condition de ta jointure ?

Code : Tout sélectionner

SELECT H.nom, H.ville, M.nom, M.ville FROM hier H LEFT OUTER JOIN maintenant M ON H.nom=M.nom AND M.ville!=H.ville
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 693 Messages

05 avr. 2007, 13:21

Ca marche.

Mais quel est la différence entre mettre dans la condition de jointure ou dans le filtre ?

Sinon, j'ai un problème avec FULL OUTER JOIN et MySQL. Est ce parce que MySQL n'utilise pas FULL OUTER JOIN ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

05 avr. 2007, 14:06

Est ce parce que MySQL n'utilise pas FULL OUTER JOIN ?
Ca me parait être une très bonne raison en effet ;)

Tu dois pouvoir simuler un full outer join en faisant un union entre un "left outer join" et un "right outer join" :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

05 avr. 2007, 15:48

j'utilise tout le temps != dans mes autres requets
Comme le disait Cyrano, il faut lui préférer <> pour des raisons de compatibilité entre les différents gestionnaires de base de données ou même entre les modes SQL de MySQL. [Edit: à vérifier, mais je pense que != génère un warning en mode ANSI]