Page 1 sur 1
Selection stricte
Posté : 21 avr. 2011, 12:21
par sylvaing26
Bonjour,
je suis actuellement sur une enorme casse tête niveau selection SQL, j'ai cette base :
| id | type | nom
------------------------------
| 1 | truc | machin
| 2 | truc | chose
| 3 | bidule | chouette
Je n'arrive pas à faire un select distinct sur ma base, je m'explique.
Je voudrais qu'on me retourne les enregistrements distincts dont le type n'est pas " truc" et le nom "chose"
Avec ce que j'explique SQL devrait me retourner la ligne 1 et 3.
Avec ma requete je n'ai que la ligne 3 :
SELECT DISTINCT type, nom FROM mabase WHERE type !='truc' AND nom != 'chose'
Merci pour l'aide

Re: Selection stricte
Posté : 21 avr. 2011, 13:10
par popy
En fait, ta requete devrait rien te retourner. Tes trois lignes contiennent soit truc soit chose.
Re réfléchis a ce que tu veux exactement.
Re: Selection stricte
Posté : 21 avr. 2011, 13:13
par sylvaing26
En fait, ta requete devrait rien te retourner. Tes trois lignes contiennent soit truc soit chose.
Re réfléchis a ce que tu veux exactement.
Oui mon exemple n'étais pas correct en effet, je viens de l'éditer
Re: Selection stricte
Posté : 21 avr. 2011, 16:07
par xTG
SELECT type, nom FROM mabase WHERE NOT(type !='truc' AND nom != 'chose')

Re: Selection stricte
Posté : 21 avr. 2011, 20:03
par popy
SELECT type, nom FROM mabase WHERE NOT(type !='truc' AND nom != 'chose')
ca reviens à
SELECT type, nom FROM mabase WHERE type ='truc' OR nom = 'chose'
Re: Selection stricte
Posté : 21 avr. 2011, 21:25
par sylvaing26
SELECT type, nom FROM mabase WHERE NOT(type !='truc' AND nom != 'chose')
ca reviens à
SELECT type, nom FROM mabase WHERE type ='truc' OR nom = 'chose'
Oui c'est vrai la synthaxe n'était pas bonne mais elle m'a mis sur la voie
La bonne requete est finalement :
SELECT type, nom FROM mabase WHERE NOT(type ='truc' AND nom = 'chose')
Mais ce NOT, en quoi est-il différent ?
Re: Selection stricte
Posté : 21 avr. 2011, 22:46
par Ryle
Le not est simplement le résultat inverse de ta condition

Le contraire de "=" étant "!=", NOT (type ='truc') équivaut donc à type!='truc'
Et de la même manière NOT(type ='truc' AND nom = 'chose') revient donc à dire type !='truc' OR nom != 'chose' (le contraire de "condition 1 ET condition 2", c'est "pas de condition 1 OU pas de condition 2")
Re: Selection stricte
Posté : 22 avr. 2011, 08:02
par xTG
Euh oui des = et pas des != je me suis planté en recopiant. (quand on est allergique aux copier/coller voilà ce qui arrive...)
Cela dit transformer le NOT ne correspond pas... Allez savoir pourquoi, en logique c'est tout à fait correct, mais MySQL ne l'interprète pas pareil...
Je n'avais pas les mêmes résultats entre :
NOT( (type ='truc' AND nom = 'chose')
et
type != 'true' OR nom != 'chose'
Re: Selection stricte
Posté : 23 avr. 2011, 20:18
par sylvaing26
Exact, je rejouterai même que pour mon cas ba ... rien ne marche !
J'ai palié à ce problème en rajoutant un champ à ma base sql.
En effet, pour est plus précis, en fait j'ai dans ma base de données un champ "genre" et un champ "espece".
Par exemple :
genre | Espece |
Chêne | rouvre |
Chêne | pédonculé |
Chêne | liège |
Peuplier | blanc |
Saule | blanc |
Saule | roux |
Aulne | blanc
etc ....
Donc voila, j'ai plusieurs genres dont certains sont les mêmes, mais aussi l'espèce, qui peut être la même pour différents genres.
Par exemple, je voudrais tous sauf genre =" saule" et espece="blanc"
Or avec toutes les solutions citées j'ai le même problème, SELECT genre FROM mabase WHERE genre != "Saule" AND espece != "blanc" va me retourner tous les enregistrements ou le genre n'est pas saule et l'espece blanc, donc je n'ai plus aucun saule dans les resultats, ni de genre ou l'espece est "blanc" ...
Bon j'ai résolu le problème en faisant un champ nomcomplet" ou du coup j'ai mis "Saule blanc" et ou je fait une selection SELECT genre FROM mabase WHERE nomcomplet != "Saule blanc"
Je pense qu'il dois y avoir un moyen mais c'est la prise de tête, je suis sur que c'est tout bête mais je vois pas ...
Re: Selection stricte
Posté : 24 avr. 2011, 00:36
par Ryle
Ah non pas tout à fait...
WHERE genre != "Saule" AND espece != "blanc"
va te retourner ni les "Saule", ni les "blanc"... donc pas de Saule rouge, ni de Pin blanc.
Si tu veux tous les enregistrement SAUF les "Saule blanc", alors il te faut aussi inverser l'opérateur
WHERE genre != "Saule" OR espece != "blanc"
tu peux aussi rechercher tous les enregistrements de Saule blanc, et utiliser l'opérateur NOT (qui n'à en principe pas de raison de retourner de résultat différent), pour inverser le résultat à retourner
WHERE NOT(genre = "Saule" AND espece = "blanc")
résultat : les enregistrement qui ne sont pas à la fois Saule et blanc
Re: Selection stricte
Posté : 24 avr. 2011, 01:08
par sylvaing26
Ah non pas tout à fait...
WHERE genre != "Saule" AND espece != "blanc"
va te retourner ni les "Saule", ni les "blanc"... donc pas de Saule rouge, ni de Pin blanc.
Si tu veux tous les enregistrement SAUF les "Saule blanc", alors il te faut aussi inverser l'opérateur
WHERE genre != "Saule" OR espece != "blanc"
tu peux aussi rechercher tous les enregistrements de Saule blanc, et utiliser l'opérateur NOT (qui n'à en principe pas de raison de retourner de résultat différent), pour inverser le résultat à retourner
WHERE NOT(genre = "Saule" AND espece = "blanc")
résultat : les enregistrement qui ne sont pas à la fois Saule et blanc
Merci tout est parfait !!!
Explication très claire en plus !
Rien à rajouter sauf un énorme résolu !! et un méga gros merci
