Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Requête UNION ne retourne pas le bon nb de lignes

2 réponses
Avatar
Philippe Pons
Bonjour,

J'ai un petit soucis avec la mise au point d'une requête UNION.
Je la met en copie ci-dessous.
La première partie seule renvoi 16 ligne.
La deuxième partie seule en renvoie 4.
La requête UNION devrait en renvoyer 20: elle n'en renvoie que 17!

Si quelqu'un a une petite idée, qu'il soit remercié de m'en faire part!!

Philippe

SELECT Year([OPIM_DATEFINRECACQ]) AS Année, [MBDR_MONTANTRECREEL]*0.804 AS
CAHT
FROM OPIMMO_OPIM INNER JOIN MBDEPREC_MBDR ON
OPIMMO_OPIM.OPIM_ID=MBDEPREC_MBDR.OPIM_ID
WHERE (((Year([OPIM_DATEFINRECACQ])) Is Not Null) AND
(([MBDR_MONTANTRECREEL]*0.804) Is Not Null) AND
((OPIMMO_OPIM.OPIM_FINRECACQOK)=True))
UNION SELECT Year([OPIM_DATEFINRECACQ]) AS Année,
[VLIGN_TTCREEL]*(1-[VTVA_POURC]) AS CAHT
FROM OPIMMO_OPIM INNER JOIN ((VEFAFAISTYPE_VTYP INNER JOIN VEFAFAISLIB_VLIB
ON VEFAFAISTYPE_VTYP.VTYP_ID = VEFAFAISLIB_VLIB.VTYP_ID) INNER JOIN
(VEFAFAISTVA_VTVA INNER JOIN VEFAFAISLIGNE_VLIGN ON VEFAFAISTVA_VTVA.VTVA_ID
= VEFAFAISLIGNE_VLIGN.VTVA_ID) ON VEFAFAISLIB_VLIB.VLIB_ID =
VEFAFAISLIGNE_VLIGN.VLIB_ID) ON OPIMMO_OPIM.OPIM_ID =
VEFAFAISLIGNE_VLIGN.OPIM_ID
WHERE (((VEFAFAISTYPE_VTYP.VTYP_TYPE)="RECETTE") AND
((OPIMMO_OPIM.OPIM_FINRECACQOK)=True));

2 réponses

Avatar
Philippe Pons
Bon, j'ai trouvé:

UNION élimine les doublons par défaut.
Pour forcer l'affichage des doublons: UNION ALL

"Philippe Pons" a écrit dans le message de
news:44a390e4$0$1030$
Bonjour,

J'ai un petit soucis avec la mise au point d'une requête UNION.
Je la met en copie ci-dessous.
La première partie seule renvoi 16 ligne.
La deuxième partie seule en renvoie 4.
La requête UNION devrait en renvoyer 20: elle n'en renvoie que 17!

Si quelqu'un a une petite idée, qu'il soit remercié de m'en faire part!!

Philippe

SELECT Year([OPIM_DATEFINRECACQ]) AS Année, [MBDR_MONTANTRECREEL]*0.804 AS
CAHT
FROM OPIMMO_OPIM INNER JOIN MBDEPREC_MBDR ON
OPIMMO_OPIM.OPIM_ID=MBDEPREC_MBDR.OPIM_ID
WHERE (((Year([OPIM_DATEFINRECACQ])) Is Not Null) AND
(([MBDR_MONTANTRECREEL]*0.804) Is Not Null) AND
((OPIMMO_OPIM.OPIM_FINRECACQOK)=True))
UNION SELECT Year([OPIM_DATEFINRECACQ]) AS Année,
[VLIGN_TTCREEL]*(1-[VTVA_POURC]) AS CAHT
FROM OPIMMO_OPIM INNER JOIN ((VEFAFAISTYPE_VTYP INNER JOIN
VEFAFAISLIB_VLIB

ON VEFAFAISTYPE_VTYP.VTYP_ID = VEFAFAISLIB_VLIB.VTYP_ID) INNER JOIN
(VEFAFAISTVA_VTVA INNER JOIN VEFAFAISLIGNE_VLIGN ON
VEFAFAISTVA_VTVA.VTVA_ID

= VEFAFAISLIGNE_VLIGN.VTVA_ID) ON VEFAFAISLIB_VLIB.VLIB_ID > VEFAFAISLIGNE_VLIGN.VLIB_ID) ON OPIMMO_OPIM.OPIM_ID > VEFAFAISLIGNE_VLIGN.OPIM_ID
WHERE (((VEFAFAISTYPE_VTYP.VTYP_TYPE)="RECETTE") AND
((OPIMMO_OPIM.OPIM_FINRECACQOK)=True));




Avatar
J-Pierre
Bonjour,

Dans ce cas pr"cis, publier ton code ne sert pas à grand chose, tu devrais analyser quelles lignes sont retournées par tes 2
requêtes puis quelles lignes manquent quand tu fais une UNION.
Essaie avec UNION ALL SELECT......, par défaut, UNION supprimer les doublons.

--
J-Pierre
------------------------------------------------------
http://www.mpfa.info :
Le site où que j'ai dû payer pour y figurer :-(
------------------------------------------------------


"Philippe Pons" a écrit dans le message de news: 44a390e4$0$1030$
Bonjour,

J'ai un petit soucis avec la mise au point d'une requête UNION.
Je la met en copie ci-dessous.
La première partie seule renvoi 16 ligne.
La deuxième partie seule en renvoie 4.
La requête UNION devrait en renvoyer 20: elle n'en renvoie que 17!

Si quelqu'un a une petite idée, qu'il soit remercié de m'en faire part!!

Philippe

SELECT Year([OPIM_DATEFINRECACQ]) AS Année, [MBDR_MONTANTRECREEL]*0.804 AS
CAHT
FROM OPIMMO_OPIM INNER JOIN MBDEPREC_MBDR ON
OPIMMO_OPIM.OPIM_ID=MBDEPREC_MBDR.OPIM_ID
WHERE (((Year([OPIM_DATEFINRECACQ])) Is Not Null) AND
(([MBDR_MONTANTRECREEL]*0.804) Is Not Null) AND
((OPIMMO_OPIM.OPIM_FINRECACQOK)=True))
UNION SELECT Year([OPIM_DATEFINRECACQ]) AS Année,
[VLIGN_TTCREEL]*(1-[VTVA_POURC]) AS CAHT
FROM OPIMMO_OPIM INNER JOIN ((VEFAFAISTYPE_VTYP INNER JOIN VEFAFAISLIB_VLIB
ON VEFAFAISTYPE_VTYP.VTYP_ID = VEFAFAISLIB_VLIB.VTYP_ID) INNER JOIN
(VEFAFAISTVA_VTVA INNER JOIN VEFAFAISLIGNE_VLIGN ON VEFAFAISTVA_VTVA.VTVA_ID
= VEFAFAISLIGNE_VLIGN.VTVA_ID) ON VEFAFAISLIB_VLIB.VLIB_ID > VEFAFAISLIGNE_VLIGN.VLIB_ID) ON OPIMMO_OPIM.OPIM_ID > VEFAFAISLIGNE_VLIGN.OPIM_ID
WHERE (((VEFAFAISTYPE_VTYP.VTYP_TYPE)="RECETTE") AND
((OPIMMO_OPIM.OPIM_FINRECACQOK)=True));