Pour les crack en sql ... - SQL/NoSQL - Programmation
Marsh Posté le 12-07-2004 à 21:25:42
Pas testé:
SELECT
libtypeetb
FROM
typeetb,
etb INNER JOIN etbtypeetb
ON (etb.idetb = etbtypeetb.idetb)
WHERE
etb.idetb = variable
AND libtypeetb NOT IN idtypeetb
;
Par contre, ta clé idetbtypeetb n'a visiblement aucun intérêt dans ton modèle.
Marsh Posté le 12-07-2004 à 21:39:57
gizmo a écrit : Pas testé: |
je connais pas l'operateur on ...
mais tu joint l'identifiant etablissement avec l'id type etablissement ?
et "AND libtypeetb NOT IN idtypeetb" me parait suspect ...
Marsh Posté le 12-07-2004 à 21:43:28
effectivement, j'ai fais la jointure sur le mauvais champs (faut dire que tu as cherché a faire des noms particulièrement imbitable)
EDIT: J'ai corrigé maintenant.
Marsh Posté le 12-07-2004 à 21:45:57
gizmo a écrit : effectivement, j'ai fais la jointure sur le mauvais champs (faut dire que tu as cherché a faire des noms particulièrement imbitable) |
bin je les trouves pas mal moi mes noms .
ils sont d'une logique imparable en plus je peut generer dysnamiquement mes requetes en fonction du nom de la table vu que c'est hyper extra top normalisé mes nom ...
bon a part ca merci du coup de main, je vais tester ....
Marsh Posté le 12-07-2004 à 21:48:43
SELECT libtypeetb
FROM typeetb, etb
INNER JOIN etbtypeetb ON ( etb.idetb = etbtypeetb.idetb )
WHERE etb.idetb = 12 AND libtypeetb NOT
IN idtypeetb
LIMIT 0 , 30
MySQL a répondu:
#1064 - Erreur de syntaxe près de 'idtypeetb LIMIT 0, 30' à la ligne 5
manifestement il aime pas ton libtypeetb NOT
IN idtypeetb
je comprend pas d'ailleurs ...
Marsh Posté le 12-07-2004 à 21:52:43
C'était un essai san garantie J'espérais que comme ils n'acceptaient pas les subselect qu'ils auraient implémenté un mécanisme permettant de faire une pirouette et profiter de la jointure sans condition avec typeetb.
Marsh Posté le 12-07-2004 à 21:53:46
idée: remplace le NOT IN par <>
EDIT: à moins que ce ne soit != dans MySQL
Marsh Posté le 13-07-2004 à 00:02:49
Et merde, fais chier avec tes noms à la con!
SELECT
type.id
FROM
type,
etablissement INNER JOIN type_etablissement
ON (etablissement.id = type_etablissement.etablissement_refid)
WHERE
etablissement.id = variable
AND type_etablissement.type_refid <> type.id
Tu feras tes remplacements de nom à la mords-moi-le-noeud toi-même.
Marsh Posté le 13-07-2004 à 00:11:20
gizmo a écrit : idée: remplace le NOT IN par <> |
http://dev.mysql.com/doc/mysql/fr/ [...] lects.html
Marsh Posté le 13-07-2004 à 00:12:42
Et? S'il ne veut pas sous requètes c'est qu'il a une version trop ancienne. Je ne vois donc pas le rapport avec la choucroute.
Marsh Posté le 13-07-2004 à 00:18:43
la version 4.1 est stable depuis quelques mois seulement. je pense que certains hébergeur ne sont pas encore à jour.
s'il y a une ancienne version stable installé (p.ex. 4.0.15), il doit utiliser cette syntaxe.
je vois pas le rapport avec la bouffe allemande dans ton poste
a+
Marsh Posté le 13-07-2004 à 00:20:47
la plupart des hébergeurs sont encore en 3.23, alors la 4.1...
Marsh Posté le 13-07-2004 à 00:21:51
justement. raison pour laquelle les NOT IN c'est pas pour demain
Marsh Posté le 13-07-2004 à 11:51:52
Pour revenir sur la remarque de gizmo ...
la clé idetbtypeetb de la table type d'etablissement par etablissement est contraire au formalisme d'un MCD tout simplement parceque la clef de ta table doit etre (idetb,idtypeetb) ... maintenant tu peux tres bien ne pas respecter le formalisme d'un MCD pour des questions de performance!
Marsh Posté le 19-07-2004 à 14:06:27
il faut faire un outer join, et une comparaison à NULL en général pour ce genre de requête en mySql 3.X
Marsh Posté le 19-07-2004 à 16:12:51
+1
Et pas besoin de la table etb dans la requête :
SELECT |
LEFT JOIN, ça veux dire que je veux tous les enregs de la table typeetb, même s'il n'y a pas de correspondance dans la table etbtypeetb pour l'établissement d'id 12.
Pour les enregistrements manquants, la valeur des champs sera NULL.
Il suffit donc de sélectionner ceux là !
Testé et approuvé par Moi-Même sur Mysql 3.23.47
Marsh Posté le 19-07-2004 à 16:19:16
gizmo a écrit : Et merde, fais chier avec tes noms à la con! |
gizmo, tu me déçois de plus en plus
Marsh Posté le 12-07-2004 à 19:17:00
salut !
voila j'ai trois tables :
mes etablisssement : etb avec comme clé : idetb
mes type d'etablissement : typeetb avec comme clé : idtypeetb
mes type d'etablissement par etablissement (un etablissement peut avoir plusieurs types)
avec comme clé idetbtypeetb.
donc mes tables(colonne1,colonnen)
etb (idetb,...)
typeetb (idtypeetb,libtypeetb)
etbtypeetb (idetbtypeetb,idetb,idtypeetb)
je recherche les types d'etablissement que NE possede PAS un etablissement donné...
sachant que c'est en mysql et que mysql n'accepte pas les select .... not in (select...)
Message édité par manofjah le 12-07-2004 à 19:20:28