Page 1 sur 1

Problème avec l'opérateur !=

Posté : 04 avr. 2007, 16:24
par orgerix
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...

Posté : 04 avr. 2007, 17:25
par Cyrano
Note :
"différent" s'écrit :
- en PHP: "!="
- en JavaScript : "!="
- en SQL : "<>"

Corrige et refais l'essai :-k

Posté : 04 avr. 2007, 17:44
par orgerix
POurtant j'utilise tout le temps != dans mes autres requets et ca marche...

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

Posté : 04 avr. 2007, 18:04
par Cyrano
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.

Posté : 04 avr. 2007, 18:19
par orgerix
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.

Posté : 05 avr. 2007, 11:09
par Ryle
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

Posté : 05 avr. 2007, 13:21
par orgerix
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 ?

Posté : 05 avr. 2007, 14:06
par Ryle
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" :)

Posté : 05 avr. 2007, 15:48
par Hubert Roksor
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]