WD12 - MySQL 4.1.x Requete

Le
I.G.LOG
Bonjour,
Je gère des codes remises associés au fichier articles. Pour ça il y a 3
tables

Table ARTICLE, clé primaire IDARTICLE
Table LIEN, colonnes IDARTICLE,IDCODEREM
Table CODEREM, colonnes IDCODEREM,VALEUR,TYPE

Chaque article peut avoir plusieurs codes remise d'achat et 1 ou 0 code
remise de vente. Ce type est caractérisés par la colonne TYPE qui prend la
valeur 1 pour achat et 2 pour vente.
Je cherche à retourner tous les articles qui n'ont pas de code remise de
vente (type 2) !! sans succès

j'ai essayé avec la requète:

select IDARTICLE,if(isnull(IDCODEREM),-1,0) as IDCODEREM
from ARTICLE
left join LIEN
on LIEN.IDARTICLE = ARTICLE.IDARTICLE
left join CODEREM
on CODEREM.IDCODEREM = LIEN.IDCODEREM
and TYPE = 2
group by IDARTICLE
having IDCODEREM = -1

mais ca me retourne des doublons sur les articles, même ceux qui ont un code
de vente

Merci pour votre aide, je bloque
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
I.G.LOG
Le #20616411
Précision:
je ne cherche pas seulement à retourner les articles qui n'ont pas de code
remise ! je veux aussi récupérer les codes remise pour chaque article; c'est
pour ça que j'utilise cette requète plutot qu'une requete avec un simple not
in (qui aurait suffit pour recuperer ceux qui n'ont pas de code remise)
Encore merci
Firetox
Le #20616621
Bonjour,

select IDARTICLE, IDCODEREM
from ARTICLE
left join LIEN on LIEN.IDARTICLE = ARTICLE.IDARTICLE
left join CODEREM on CODEREM.IDCODEREM = LIEN.IDCODEREM
and TYPE = 2
where IDCODEREM is null

va renvoyer tous les articles qui n'ont pas de remise code vente
et ici on aura 1 seule ligne par article

miantenant pour la requete qui recupere les code remise

select IDARTICLE, IDCODEREM
from ARTICLE
left join LIEN on LIEN.IDARTICLE = ARTICLE.IDARTICLE
left join CODEREM on CODEREM.IDCODEREM = LIEN.IDCODEREM
and TYPE = 2

donne normalement tous les articles avec ou non un code remise sur les
ventes
donc 1 ligne par article en regardant ton analyse

maintenant la question est veux tu aussi les remise achat dans la meme
requete

Bon dev
@+









"I.G.LOG" news:4b0ac6b3$0$973$
Bonjour,
Je gère des codes remises associés au fichier articles. Pour ça il y a 3
tables

Table ARTICLE, clé primaire IDARTICLE
Table LIEN, colonnes IDARTICLE,IDCODEREM
Table CODEREM, colonnes IDCODEREM,VALEUR,TYPE

Chaque article peut avoir plusieurs codes remise d'achat et 1 ou 0 code
remise de vente. Ce type est caractérisés par la colonne TYPE qui prend la
valeur 1 pour achat et 2 pour vente.
Je cherche à retourner tous les articles qui n'ont pas de code remise de
vente (type 2) !! sans succès...

j'ai essayé avec la requète:

select IDARTICLE,if(isnull(IDCODEREM),-1,0) as IDCODEREM
from ARTICLE
left join LIEN
on LIEN.IDARTICLE = ARTICLE.IDARTICLE
left join CODEREM
on CODEREM.IDCODEREM = LIEN.IDCODEREM
and TYPE = 2
group by IDARTICLE
having IDCODEREM = -1

mais ca me retourne des doublons sur les articles, même ceux qui ont un
code de vente

Merci pour votre aide, je bloque



Firetox
Le #20616811
une petite erreur c'est glisse dans la deuxieme requete


select IDARTICLE, IDCODEREM
from ARTICLE
left join LIEN on LIEN.IDARTICLE = ARTICLE.IDARTICLE
join CODEREM on CODEREM.IDCODEREM = LIEN.IDCODEREM
and TYPE = 2





"Firetox" news:4b0adb4e$0$11534$
Bonjour,

select IDARTICLE, IDCODEREM
from ARTICLE
left join LIEN on LIEN.IDARTICLE = ARTICLE.IDARTICLE
left join CODEREM on CODEREM.IDCODEREM = LIEN.IDCODEREM
and TYPE = 2
where IDCODEREM is null

va renvoyer tous les articles qui n'ont pas de remise code vente
et ici on aura 1 seule ligne par article

miantenant pour la requete qui recupere les code remise

select IDARTICLE, IDCODEREM
from ARTICLE
left join LIEN on LIEN.IDARTICLE = ARTICLE.IDARTICLE
left join CODEREM on CODEREM.IDCODEREM = LIEN.IDCODEREM
and TYPE = 2

donne normalement tous les articles avec ou non un code remise sur les
ventes
donc 1 ligne par article en regardant ton analyse

maintenant la question est veux tu aussi les remise achat dans la meme
requete

Bon dev
@+









"I.G.LOG" news:4b0ac6b3$0$973$
Bonjour,
Je gère des codes remises associés au fichier articles. Pour ça il y a 3
tables

Table ARTICLE, clé primaire IDARTICLE
Table LIEN, colonnes IDARTICLE,IDCODEREM
Table CODEREM, colonnes IDCODEREM,VALEUR,TYPE

Chaque article peut avoir plusieurs codes remise d'achat et 1 ou 0 code
remise de vente. Ce type est caractérisés par la colonne TYPE qui prend
la valeur 1 pour achat et 2 pour vente.
Je cherche à retourner tous les articles qui n'ont pas de code remise de
vente (type 2) !! sans succès...

j'ai essayé avec la requète:

select IDARTICLE,if(isnull(IDCODEREM),-1,0) as IDCODEREM
from ARTICLE
left join LIEN
on LIEN.IDARTICLE = ARTICLE.IDARTICLE
left join CODEREM
on CODEREM.IDCODEREM = LIEN.IDCODEREM
and TYPE = 2
group by IDARTICLE
having IDCODEREM = -1

mais ca me retourne des doublons sur les articles, même ceux qui ont un
code de vente

Merci pour votre aide, je bloque






I.G.LOG
Le #20619651
"Firetox" 4b0adb4e$0$11534$
Bonjour,

select IDARTICLE, IDCODEREM
from ARTICLE
left join LIEN on LIEN.IDARTICLE = ARTICLE.IDARTICLE
left join CODEREM on CODEREM.IDCODEREM = LIEN.IDCODEREM
and TYPE = 2
where IDCODEREM is null

va renvoyer tous les articles qui n'ont pas de remise code vente
et ici on aura 1 seule ligne par article




Bonjour Firetox,

Je viens de faire l'essai, mais la requete me sort les articles qui ont un
code remise !?!
Et certains articles en double, ceux qui ont 3 lignes dans la table LIEN
(dont une pointant sur un code remise de vente)
Je ne comprends pas, et c'est pour ça que j'avais cru régler le problème
avec une requete plus complexe

Encore merci
Firetox
Le #20619971
meme avec celle la ?

select IDARTICLE, IDCODEREM
from ARTICLE
left join LIEN on LIEN.IDARTICLE = ARTICLE.IDARTICLE
join CODEREM on CODEREM.IDCODEREM = LIEN.IDCODEREM
and TYPE = 2

car il y avait une erreur dans la requete
si tu ne veux que ceux qui ont un code vente = 2

select IDARTICLE, IDCODEREM
from ARTICLE
join LIEN on LIEN.IDARTICLE = ARTICLE.IDARTICLE
join CODEREM on CODEREM.IDCODEREM = LIEN.IDCODEREM
whereTYPE = 2

la premiere jointure
soit je met left join et j'ai tous les articles multiplier par leurs liens
donc plusieurs lignes mais aussi ceux qui n'en n'ont pas
soit je met join et la j'ai aussi les articles multiplier par leurs liens
mais je n'ai plus les articles qui n'ont pas de lien

la deuxieme jointure (depend du left ou non de la premiere requete
si je met left join il va garder les liens multiples et donc plusieurs
article
si je met join il ne devrait rester que les lien de type =2 et suivant le
left join ou join de la premiere les ligne vide sur les article n'ayant pas
de type=2

de ce fait le where coupe tout ca pour laisser que les type = 2 (qu'il y ai
left join ou join sur la premiere requete)
essaye les differentes versions tu verras ce que ca donne et donc ut
comprendra mieux ce qui se passe derriere.

un left join avec where revient a faire un join (dans le where si tu mets
une condition sur la table liée dans le left join)



"I.G.LOG" news:4b0b91f7$0$890$

"Firetox" 4b0adb4e$0$11534$
Bonjour,

select IDARTICLE, IDCODEREM
from ARTICLE
left join LIEN on LIEN.IDARTICLE = ARTICLE.IDARTICLE
left join CODEREM on CODEREM.IDCODEREM = LIEN.IDCODEREM
and TYPE = 2
where IDCODEREM is null

va renvoyer tous les articles qui n'ont pas de remise code vente
et ici on aura 1 seule ligne par article




Bonjour Firetox,

Je viens de faire l'essai, mais la requete me sort les articles qui ont un
code remise !?!
Et certains articles en double, ceux qui ont 3 lignes dans la table LIEN
(dont une pointant sur un code remise de vente)
Je ne comprends pas, et c'est pour ça que j'avais cru régler le problème
avec une requete plus complexe

Encore merci



I.G.LOG
Le #20620151
> meme avec celle la ?

select IDARTICLE, IDCODEREM
from ARTICLE
left join LIEN on LIEN.IDARTICLE = ARTICLE.IDARTICLE
join CODEREM on CODEREM.IDCODEREM = LIEN.IDCODEREM
and TYPE = 2




... and IDCODEREM is nul si je veux ceux qui n'ont pas de code remise de
vente.
Mais dans ce cas, la requete ne me retourne rien !!!


select IDARTICLE, IDCODEREM
from ARTICLE
join LIEN on LIEN.IDARTICLE = ARTICLE.IDARTICLE
join CODEREM on CODEREM.IDCODEREM = LIEN.IDCODEREM
whereTYPE = 2




idem pour celle-ci, ca ne me retourne rien...

la premiere jointure
soit je met left join et j'ai tous les articles multiplier par leurs liens
donc plusieurs lignes mais aussi ceux qui n'en n'ont pas
soit je met join et la j'ai aussi les articles multiplier par leurs liens
mais je n'ai plus les articles qui n'ont pas de lien

la deuxieme jointure (depend du left ou non de la premiere requete
si je met left join il va garder les liens multiples et donc plusieurs
article
si je met join il ne devrait rester que les lien de type =2 et suivant le
left join ou join de la premiere les ligne vide sur les article n'ayant
pas de type=2

de ce fait le where coupe tout ca pour laisser que les type = 2 (qu'il y
ai left join ou join sur la premiere requete)
essaye les differentes versions tu verras ce que ca donne et donc ut
comprendra mieux ce qui se passe derriere.

un left join avec where revient a faire un join (dans le where si tu mets
une condition sur la table liée dans le left join)





je dois avouer que je ne comprends pas bien ce que les mixages left join et
join (join = inner join ?) vont donner !
Firetox
Le #20620141
non

select IDARTICLE, IDCODEREM
from ARTICLE
left join LIEN on LIEN.IDARTICLE = ARTICLE.IDARTICLE
join CODEREM on CODEREM.IDCODEREM = LIEN.IDCODEREM
and TYPE = 2
where IDCODEREM is null

ou

select IDARTICLE, IDCODEREM
from ARTICLE
left join LIEN on LIEN.IDARTICLE = ARTICLE.IDARTICLE
join CODEREM on CODEREM.IDCODEREM = LIEN.IDCODEREM
and TYPE = 2
Having IDCODEREM is null

car il faut laisser faire la jointure et eliminer apres



"I.G.LOG" news:4b0ba5f0$0$893$
meme avec celle la ?

select IDARTICLE, IDCODEREM
from ARTICLE
left join LIEN on LIEN.IDARTICLE = ARTICLE.IDARTICLE
join CODEREM on CODEREM.IDCODEREM = LIEN.IDCODEREM
and TYPE = 2




... and IDCODEREM is nul si je veux ceux qui n'ont pas de code remise de
vente.
Mais dans ce cas, la requete ne me retourne rien !!!


select IDARTICLE, IDCODEREM
from ARTICLE
join LIEN on LIEN.IDARTICLE = ARTICLE.IDARTICLE
join CODEREM on CODEREM.IDCODEREM = LIEN.IDCODEREM
whereTYPE = 2




idem pour celle-ci, ca ne me retourne rien...

la premiere jointure
soit je met left join et j'ai tous les articles multiplier par leurs
liens donc plusieurs lignes mais aussi ceux qui n'en n'ont pas
soit je met join et la j'ai aussi les articles multiplier par leurs liens
mais je n'ai plus les articles qui n'ont pas de lien

la deuxieme jointure (depend du left ou non de la premiere requete
si je met left join il va garder les liens multiples et donc plusieurs
article
si je met join il ne devrait rester que les lien de type =2 et suivant le
left join ou join de la premiere les ligne vide sur les article n'ayant
pas de type=2

de ce fait le where coupe tout ca pour laisser que les type = 2 (qu'il y
ai left join ou join sur la premiere requete)
essaye les differentes versions tu verras ce que ca donne et donc ut
comprendra mieux ce qui se passe derriere.

un left join avec where revient a faire un join (dans le where si tu mets
une condition sur la table liée dans le left join)





je dois avouer que je ne comprends pas bien ce que les mixages left join
et join (join = inner join ?) vont donner !



Firetox
Le #20620131
Attention dans ce cas il faut left join

non

select IDARTICLE, IDCODEREM
from ARTICLE
left join LIEN on LIEN.IDARTICLE = ARTICLE.IDARTICLE
left join CODEREM on CODEREM.IDCODEREM = LIEN.IDCODEREM
and TYPE = 2
where IDCODEREM is null

ou

select IDARTICLE, IDCODEREM
from ARTICLE
left join LIEN on LIEN.IDARTICLE = ARTICLE.IDARTICLE
left join CODEREM on CODEREM.IDCODEREM = LIEN.IDCODEREM
and TYPE = 2
Having IDCODEREM is null


"I.G.LOG" news:4b0ba5f0$0$893$
meme avec celle la ?

select IDARTICLE, IDCODEREM
from ARTICLE
left join LIEN on LIEN.IDARTICLE = ARTICLE.IDARTICLE
join CODEREM on CODEREM.IDCODEREM = LIEN.IDCODEREM
and TYPE = 2




... and IDCODEREM is nul si je veux ceux qui n'ont pas de code remise de
vente.
Mais dans ce cas, la requete ne me retourne rien !!!


select IDARTICLE, IDCODEREM
from ARTICLE
join LIEN on LIEN.IDARTICLE = ARTICLE.IDARTICLE
join CODEREM on CODEREM.IDCODEREM = LIEN.IDCODEREM
whereTYPE = 2




idem pour celle-ci, ca ne me retourne rien...

la premiere jointure
soit je met left join et j'ai tous les articles multiplier par leurs
liens donc plusieurs lignes mais aussi ceux qui n'en n'ont pas
soit je met join et la j'ai aussi les articles multiplier par leurs liens
mais je n'ai plus les articles qui n'ont pas de lien

la deuxieme jointure (depend du left ou non de la premiere requete
si je met left join il va garder les liens multiples et donc plusieurs
article
si je met join il ne devrait rester que les lien de type =2 et suivant le
left join ou join de la premiere les ligne vide sur les article n'ayant
pas de type=2

de ce fait le where coupe tout ca pour laisser que les type = 2 (qu'il y
ai left join ou join sur la premiere requete)
essaye les differentes versions tu verras ce que ca donne et donc ut
comprendra mieux ce qui se passe derriere.

un left join avec where revient a faire un join (dans le where si tu mets
une condition sur la table liée dans le left join)





je dois avouer que je ne comprends pas bien ce que les mixages left join
et join (join = inner join ?) vont donner !



I.G.LOG
Le #20620251
>
select IDARTICLE, IDCODEREM
from ARTICLE
left join LIEN on LIEN.IDARTICLE = ARTICLE.IDARTICLE
left join CODEREM on CODEREM.IDCODEREM = LIEN.IDCODEREM
and TYPE = 2
where IDCODEREM is null

ou

select IDARTICLE, IDCODEREM
from ARTICLE
left join LIEN on LIEN.IDARTICLE = ARTICLE.IDARTICLE
left join CODEREM on CODEREM.IDCODEREM = LIEN.IDCODEREM
and TYPE = 2
Having IDCODEREM is null




aucune ne fonctionne, ca me retourne des articles en double, même ceux qui
ont le code 2 !!!

mais - incroyable - en modifiant comme suit ca fonctionne:

select IDARTICLE
from ARTICLE
left join LIEN on LIEN.IDARTICLE = ARTICLE.IDARTICLE
left join CODEREM on CODEREM.IDCODEREM = LIEN.IDCODEREM and TYPE = 2
where LIEN.IDARTICLE is null

j'ai remplacé where IDCODEREM par LIEN.IDARTICLE ?????
Firetox
Le #20620341
oui

car en fait tu obtiens les articles sans liens article dons sans codeRemise
mais est cela que tu voulais ?

select IDARTICLE
from ARTICLE
left join LIEN on LIEN.IDARTICLE = ARTICLE.IDARTICLE
left join CODEREM on CODEREM.IDCODEREM = LIEN.IDCODEREM and TYPE = 2
where LIEN.IDARTICLE is null


Publicité
Poster une réponse
Anonyme