J'ai lu que mySQL ne gérait pas les SEELCT imbriqués. Or c'est le seul moyen
que je connaisse pour faire une requête du genre :
Donne moi tous les items de la table A dont l'identifiant n'existe pas dans
la table B.
du genre :
SELECT A.nom FROM A where A.id NOT IN (SELECT B.id FROM B)
Aussi, sauriez-vous me traduire cette "requête" en une simple requête mySQL.
et si vous êtes en forme, essayez plutot sur celle-là :
SELECT A.nom FROM A where A.id NOT IN (SELECT B.id FROM B, C where B.link =
C.link)
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
romain
tu veux pas repondre a ma question "indexe dans un requete sql" ?
Euh, c'est quoi ta question ?
Chris
oui comme ca je l'admet c'est pas tres clair. c'est le post intitule "indexe dans un requete" -- Accédez à ce forum en un clique sur le web avec http://web2news.com http://web2news.com/?fr.comp.applications.sgbd
tu veux pas repondre a ma question "indexe dans un requete sql" ?
Euh, c'est quoi ta question ?
Chris
oui comme ca je l'admet c'est pas tres clair.
c'est le post intitule "indexe dans un requete"
--
Accédez à ce forum en un clique sur le web avec http://web2news.com
http://web2news.com/?fr.comp.applications.sgbd
tu veux pas repondre a ma question "indexe dans un requete sql" ?
Euh, c'est quoi ta question ?
Chris
oui comme ca je l'admet c'est pas tres clair. c'est le post intitule "indexe dans un requete" -- Accédez à ce forum en un clique sur le web avec http://web2news.com http://web2news.com/?fr.comp.applications.sgbd
John S.
Et bien j'ai essayé de tirer de la bonne graine de tes exemples (j'avoue que je n'y comprend rien à leur LEFT OUTER INNER Bidule JOIN), je maitrise mieux les SELECT IN NOT IN =* et * J'ai donc écrit cette requête :
SELECT cat.nom FROM CategorieSite cat, TJ_Site_CategorieSite TJ
LEFT JOIN Site site ON site.idURL = TJ.idURL AND site.indActif = 1
WHERE cat.idCategorie = TJ.idCategorie AND IsNULL(site.idURL)
TJ est une table de jointure entre CategorieSite et Site
Elle est supposée me retourner les noms des catégories qui n'ont aucun site actif (indActif = 1). Or elle semble en fait ramener les noms des Catégories qui ont Au Moins un site inactif. Vois-tu où est l'erreur ?
Merci.
"Christophe Lephay" a écrit dans le message de news: bddt20$3r2$
"John S." a écrit dans le message de news:bddpse$p6m$ > J'ai lu que mySQL ne gérait pas les SEELCT imbriqués. Or c'est le seul moyen > que je connaisse pour faire une requête du genre : > > Donne moi tous les items de la table A dont l'identifiant n'existe pas dans > la table B. > du genre : > SELECT A.nom FROM A where A.id NOT IN (SELECT B.id FROM B) > > Aussi, sauriez-vous me traduire cette "requête" en une simple requête mySQL.
SELECT A.nom FROM A LEFT JOIN B ON A.Id = B.Id WHERE IsNull(B.Id)
> et si vous êtes en forme, essayez plutot sur celle-là : > > SELECT A.nom FROM A where A.id NOT IN (SELECT B.id FROM B, C where
B.link
> > C.link)
SELECT A.nom FROM (A LEFT JOIN B ON A.Id = B.Id) INNER JOIN C ON B.link > C.link WHERE IsNull(B.ID)
Bon, je m'ennuie... Tu as pas quelquechose d'un peu plus costaud ? ;)
Chris
PS : ces requêtes sont assez idiomatiques...
Et bien j'ai essayé de tirer de la bonne graine de tes exemples (j'avoue que
je n'y comprend rien à leur LEFT OUTER INNER Bidule JOIN), je maitrise mieux
les SELECT IN NOT IN =* et *
J'ai donc écrit cette requête :
SELECT cat.nom
FROM CategorieSite cat, TJ_Site_CategorieSite TJ
LEFT JOIN Site site
ON site.idURL = TJ.idURL
AND site.indActif = 1
WHERE cat.idCategorie = TJ.idCategorie
AND IsNULL(site.idURL)
TJ est une table de jointure entre CategorieSite et Site
Elle est supposée me retourner les noms des catégories qui n'ont aucun site
actif (indActif = 1).
Or elle semble en fait ramener les noms des Catégories qui ont Au Moins un
site inactif.
Vois-tu où est l'erreur ?
Merci.
"Christophe Lephay" <christophe-lephay@wanadoo.fr> a écrit dans le message
de news: bddt20$3r2$1@news-reader2.wanadoo.fr...
"John S." <test@test.com> a écrit dans le message de
news:bddpse$p6m$1@news-reader1.wanadoo.fr...
> J'ai lu que mySQL ne gérait pas les SEELCT imbriqués. Or c'est le seul
moyen
> que je connaisse pour faire une requête du genre :
>
> Donne moi tous les items de la table A dont l'identifiant n'existe pas
dans
> la table B.
> du genre :
> SELECT A.nom FROM A where A.id NOT IN (SELECT B.id FROM B)
>
> Aussi, sauriez-vous me traduire cette "requête" en une simple requête
mySQL.
SELECT A.nom FROM A LEFT JOIN B ON A.Id = B.Id WHERE IsNull(B.Id)
> et si vous êtes en forme, essayez plutot sur celle-là :
>
> SELECT A.nom FROM A where A.id NOT IN (SELECT B.id FROM B, C where
B.link
> > C.link)
SELECT A.nom FROM (A LEFT JOIN B ON A.Id = B.Id) INNER JOIN C ON B.link > C.link
WHERE IsNull(B.ID)
Bon, je m'ennuie... Tu as pas quelquechose d'un peu plus costaud ? ;)
Et bien j'ai essayé de tirer de la bonne graine de tes exemples (j'avoue que je n'y comprend rien à leur LEFT OUTER INNER Bidule JOIN), je maitrise mieux les SELECT IN NOT IN =* et * J'ai donc écrit cette requête :
SELECT cat.nom FROM CategorieSite cat, TJ_Site_CategorieSite TJ
LEFT JOIN Site site ON site.idURL = TJ.idURL AND site.indActif = 1
WHERE cat.idCategorie = TJ.idCategorie AND IsNULL(site.idURL)
TJ est une table de jointure entre CategorieSite et Site
Elle est supposée me retourner les noms des catégories qui n'ont aucun site actif (indActif = 1). Or elle semble en fait ramener les noms des Catégories qui ont Au Moins un site inactif. Vois-tu où est l'erreur ?
Merci.
"Christophe Lephay" a écrit dans le message de news: bddt20$3r2$
"John S." a écrit dans le message de news:bddpse$p6m$ > J'ai lu que mySQL ne gérait pas les SEELCT imbriqués. Or c'est le seul moyen > que je connaisse pour faire une requête du genre : > > Donne moi tous les items de la table A dont l'identifiant n'existe pas dans > la table B. > du genre : > SELECT A.nom FROM A where A.id NOT IN (SELECT B.id FROM B) > > Aussi, sauriez-vous me traduire cette "requête" en une simple requête mySQL.
SELECT A.nom FROM A LEFT JOIN B ON A.Id = B.Id WHERE IsNull(B.Id)
> et si vous êtes en forme, essayez plutot sur celle-là : > > SELECT A.nom FROM A where A.id NOT IN (SELECT B.id FROM B, C where
B.link
> > C.link)
SELECT A.nom FROM (A LEFT JOIN B ON A.Id = B.Id) INNER JOIN C ON B.link > C.link WHERE IsNull(B.ID)
Bon, je m'ennuie... Tu as pas quelquechose d'un peu plus costaud ? ;)
Chris
PS : ces requêtes sont assez idiomatiques...
Christophe Lephay
"John S." a écrit dans le message de news:bdf2m6$33q$
Et bien j'ai essayé de tirer de la bonne graine de tes exemples (j'avoue
que
je n'y comprend rien à leur LEFT OUTER INNER Bidule JOIN), je maitrise
mieux
les SELECT IN NOT IN =* et *
Oui, c'est pas très intuitif. C'est pour celà qu'il est important de dégager une forme idiomatique (comme ça, une fois que tu as une solution générale à ce type de problèmes, tu l'appliques sans plus avoir à y reflechir ou à comprendre en détail comment ça marche).
J'ai donc écrit cette requête :
SELECT cat.nom FROM CategorieSite cat, TJ_Site_CategorieSite TJ
LEFT JOIN Site site ON site.idURL = TJ.idURL AND site.indActif = 1
WHERE cat.idCategorie = TJ.idCategorie AND IsNULL(site.idURL)
TJ est une table de jointure entre CategorieSite et Site
Elle est supposée me retourner les noms des catégories qui n'ont aucun
site
actif (indActif = 1). Or elle semble en fait ramener les noms des Catégories qui ont Au Moins un site inactif. Vois-tu où est l'erreur ?
Oui avec cet idiome, le seul critère que tu peux mettre c'est pour tester l'appartenance à un ensemble. Si l'ensemble en question est lui-même un sous ensemble restreint , alors tu es obligé de faire une requete intermédiaire avec les clauses where pour le restreindre (tu ne peux donc pas obtenir ce que tu veux faire en une seule requete).
Il faudrait un truc comme :
intermediaire SELECT TJ.idURL FROM TJ INNER JOIN site on TJ.idURL = site.idURL WHERE site.indActif = 1
SELECT cat.nom FROM cat FROM cat LEFT JOIN intermediaire on cat.idURL = intermediaire.idURL WHERE ISNULL( intermediaire.idURL )
En fait, c'est (vraisemblablement) de cette manière que l'interpreteur SQL traduit les NOT IN, et c'est donc probablement parce que MySQL ne permet pas les select from select qu'il ne permet pas non plus NOT IN...
Chris
"John S." <test@test.com> a écrit dans le message de
news:bdf2m6$33q$1@news-reader3.wanadoo.fr...
Et bien j'ai essayé de tirer de la bonne graine de tes exemples (j'avoue
que
je n'y comprend rien à leur LEFT OUTER INNER Bidule JOIN), je maitrise
mieux
les SELECT IN NOT IN =* et *
Oui, c'est pas très intuitif. C'est pour celà qu'il est important de dégager
une forme idiomatique (comme ça, une fois que tu as une solution générale à
ce type de problèmes, tu l'appliques sans plus avoir à y reflechir ou à
comprendre en détail comment ça marche).
J'ai donc écrit cette requête :
SELECT cat.nom
FROM CategorieSite cat, TJ_Site_CategorieSite TJ
LEFT JOIN Site site
ON site.idURL = TJ.idURL
AND site.indActif = 1
WHERE cat.idCategorie = TJ.idCategorie
AND IsNULL(site.idURL)
TJ est une table de jointure entre CategorieSite et Site
Elle est supposée me retourner les noms des catégories qui n'ont aucun
site
actif (indActif = 1).
Or elle semble en fait ramener les noms des Catégories qui ont Au Moins un
site inactif.
Vois-tu où est l'erreur ?
Oui avec cet idiome, le seul critère que tu peux mettre c'est pour tester
l'appartenance à un ensemble. Si l'ensemble en question est lui-même un sous
ensemble restreint , alors tu es obligé de faire une requete intermédiaire
avec les clauses where pour le restreindre (tu ne peux donc pas obtenir ce
que tu veux faire en une seule requete).
Il faudrait un truc comme :
intermediaire SELECT TJ.idURL
FROM TJ INNER JOIN site on TJ.idURL = site.idURL
WHERE site.indActif = 1
SELECT cat.nom FROM cat
FROM cat LEFT JOIN intermediaire on cat.idURL = intermediaire.idURL
WHERE ISNULL( intermediaire.idURL )
En fait, c'est (vraisemblablement) de cette manière que l'interpreteur SQL
traduit les NOT IN, et c'est donc probablement parce que MySQL ne permet pas
les select from select qu'il ne permet pas non plus NOT IN...
"John S." a écrit dans le message de news:bdf2m6$33q$
Et bien j'ai essayé de tirer de la bonne graine de tes exemples (j'avoue
que
je n'y comprend rien à leur LEFT OUTER INNER Bidule JOIN), je maitrise
mieux
les SELECT IN NOT IN =* et *
Oui, c'est pas très intuitif. C'est pour celà qu'il est important de dégager une forme idiomatique (comme ça, une fois que tu as une solution générale à ce type de problèmes, tu l'appliques sans plus avoir à y reflechir ou à comprendre en détail comment ça marche).
J'ai donc écrit cette requête :
SELECT cat.nom FROM CategorieSite cat, TJ_Site_CategorieSite TJ
LEFT JOIN Site site ON site.idURL = TJ.idURL AND site.indActif = 1
WHERE cat.idCategorie = TJ.idCategorie AND IsNULL(site.idURL)
TJ est une table de jointure entre CategorieSite et Site
Elle est supposée me retourner les noms des catégories qui n'ont aucun
site
actif (indActif = 1). Or elle semble en fait ramener les noms des Catégories qui ont Au Moins un site inactif. Vois-tu où est l'erreur ?
Oui avec cet idiome, le seul critère que tu peux mettre c'est pour tester l'appartenance à un ensemble. Si l'ensemble en question est lui-même un sous ensemble restreint , alors tu es obligé de faire une requete intermédiaire avec les clauses where pour le restreindre (tu ne peux donc pas obtenir ce que tu veux faire en une seule requete).
Il faudrait un truc comme :
intermediaire SELECT TJ.idURL FROM TJ INNER JOIN site on TJ.idURL = site.idURL WHERE site.indActif = 1
SELECT cat.nom FROM cat FROM cat LEFT JOIN intermediaire on cat.idURL = intermediaire.idURL WHERE ISNULL( intermediaire.idURL )
En fait, c'est (vraisemblablement) de cette manière que l'interpreteur SQL traduit les NOT IN, et c'est donc probablement parce que MySQL ne permet pas les select from select qu'il ne permet pas non plus NOT IN...