PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → requête sql - syntaxe ???
requête sql - syntaxe ???
Débuté par pierre.flandre, 16 aoû. 2004 18:50 - 3 réponses
Posté le 16 août 2004 - 18:50
Débutant en windev , j'ai la question suivante concernant les requêtes.

wd8 314
soit 2 fichiers

avion_ticket o,n
suplement_reduction 1,1

base mysql avec accès natif

j'effectue la requête SQL suivante : (avec le générateur de requête windev)

SELECT Avion_ticket.at_num_billet AS at_num_billet,
Avion_ticket.at_date_emission AS at_date_emission,
Avion_ticket.at_cleunik AS at_cleunik,
Avion_ticket.at_val_facial AS at_val_facial,
suplement_reduction.at_cleunik AS at_cleunik_su,
suplement_reduction.sn_prix AS sn_prix,
suplement_reduction.ctpro_cleunik AS ctpro_cleunik,
suplement_reduction.snlib_cleunik AS snlib_cleunik
FROM Avion_ticket LEFT OUTER JOIN suplement_reduction ON
Avion_ticket.at_cleunik = suplement_reduction.at_cleunik
WHERE Avion_ticket.at_date_emission BETWEEN {Param1} AND {Param2}
AND suplement_reduction.ctpro_cleunik = 1
AND suplement_reduction.snlib_cleunik = -1
ORDER BY at_num_billet ASC, at_date_emission ASC

cela m'affiche tous les avion_ticket+le suplement reduction correspondant à
la requête .... sauf les avion_ticket qui n'ont pas de suplement_reduction
Si je retire mes conditions sur le fichier suplement_reduction, tous les
avion_ticket sont bien affichés même ceux sans suplement_reduction

comment faire pour qu'il m'affiche aussi les avion_ticket qui n'ont pas de
suplement_reduction dans la même table

D'avance merci
Pierre
Posté le 16 août 2004 - 20:00
"Pierre Flandre" <pierre.flandre@japanpitravel.com> wrote:

Débutant en windev , j'ai la question suivante concernant les requêtes.

wd8 314
soit 2 fichiers

avion_ticket o,n
suplement_reduction 1,1

base mysql avec accès natif

j'effectue la requête SQL suivante : (avec le générateur de requête windev)

SELECT Avion_ticket.at_num_billet AS at_num_billet,
Avion_ticket.at_date_emission AS at_date_emission,
Avion_ticket.at_cleunik AS at_cleunik,
Avion_ticket.at_val_facial AS at_val_facial,
suplement_reduction.at_cleunik AS at_cleunik_su,
suplement_reduction.sn_prix AS sn_prix,
suplement_reduction.ctpro_cleunik AS ctpro_cleunik,
suplement_reduction.snlib_cleunik AS snlib_cleunik
FROM Avion_ticket LEFT OUTER JOIN suplement_reduction ON
Avion_ticket.at_cleunik = suplement_reduction.at_cleunik
WHERE Avion_ticket.at_date_emission BETWEEN {Param1} AND {Param2}
AND suplement_reduction.ctpro_cleunik = 1
AND suplement_reduction.snlib_cleunik = -1
ORDER BY at_num_billet ASC, at_date_emission ASC

cela m'affiche tous les avion_ticket+le suplement reduction correspondant

à
la requête .... sauf les avion_ticket qui n'ont pas de suplement_reduction
Si je retire mes conditions sur le fichier suplement_reduction, tous les
avion_ticket sont bien affichés même ceux sans suplement_reduction

comment faire pour qu'il m'affiche aussi les avion_ticket qui n'ont pas

de
suplement_reduction dans la même table

D'avance merci
Pierre



D'après ce que je comprends de ta demande, tu veux avoir tous les avion_ticket
qui ont un supplément_reduction combinés à tous les avion_ticket qui n'ont
pas de supplément_reduction. Il faut travailler avec 2 resultats distincts
combinées avec UNION. Essaie ceci:

SELECT Avion_ticket.at_num_billet AS at_num_billet,
Avion_ticket.at_date_emission AS at_date_emission,
Avion_ticket.at_cleunik AS at_cleunik,
Avion_ticket.at_val_facial AS at_val_facial,
suplement_reduction.at_cleunik AS at_cleunik_su,
suplement_reduction.sn_prix AS sn_prix,
suplement_reduction.ctpro_cleunik AS ctpro_cleunik,
suplement_reduction.snlib_cleunik AS snlib_cleunik
FROM Avion_ticket
LEFT OUTER JOIN suplement_reduction ON
Avion_ticket.at_cleunik = suplement_reduction.at_cleunik
WHERE Avion_ticket.at_date_emission BETWEEN {Param1} AND {Param2}
AND suplement_reduction.ctpro_cleunik = 1
AND suplement_reduction.snlib_cleunik = -1
UNION ALL
SELECT Avion_ticket.at_num_billet AS at_num_billet,
Avion_ticket.at_date_emission AS at_date_emission,
Avion_ticket.at_cleunik AS at_cleunik,
Avion_ticket.at_val_facial AS at_val_facial,
0 AS at_cleunik_su,
0 AS sn_prix,
0 AS ctpro_cleunik,
0 AS snlib_cleunik
FROM Avion_ticket
WHERE Avion_ticket.at_date_emission BETWEEN {Param1} AND {param2}
AND Avion_ticket.at_cleunik NOT IN
(SELECT DISTINCT suplement_reduction.at_cleunik
FROM supplement_reduction)
ORDER BY at_num_billet ASC, at_date_emission ASC

Christian Potvin
Beaulieu Canada
Posté le 17 août 2004 - 16:26
"Christian Potvin" <cpotvin@beaulieucanada.ca> wrote:


"Pierre Flandre" <pierre.flandre@japanpitravel.com> wrote:

Débutant en windev , j'ai la question suivante concernant les requêtes.

wd8 314
soit 2 fichiers

avion_ticket o,n
suplement_reduction 1,1

base mysql avec accès natif

j'effectue la requête SQL suivante : (avec le générateur de requête windev)

SELECT Avion_ticket.at_num_billet AS at_num_billet,
Avion_ticket.at_date_emission AS at_date_emission,
Avion_ticket.at_cleunik AS at_cleunik,
Avion_ticket.at_val_facial AS at_val_facial,
suplement_reduction.at_cleunik AS at_cleunik_su,
suplement_reduction.sn_prix AS sn_prix,
suplement_reduction.ctpro_cleunik AS ctpro_cleunik,
suplement_reduction.snlib_cleunik AS snlib_cleunik
FROM Avion_ticket LEFT OUTER JOIN suplement_reduction ON
Avion_ticket.at_cleunik = suplement_reduction.at_cleunik
WHERE Avion_ticket.at_date_emission BETWEEN {Param1} AND {Param2}
AND suplement_reduction.ctpro_cleunik = 1
AND suplement_reduction.snlib_cleunik = -1
ORDER BY at_num_billet ASC, at_date_emission ASC

cela m'affiche tous les avion_ticket+le suplement reduction correspondant
à

la requête .... sauf les avion_ticket qui n'ont pas de suplement_reduction
Si je retire mes conditions sur le fichier suplement_reduction, tous les
avion_ticket sont bien affichés même ceux sans suplement_reduction

comment faire pour qu'il m'affiche aussi les avion_ticket qui n'ont pas
de

suplement_reduction dans la même table

D'avance merci
Pierre



D'après ce que je comprends de ta demande, tu veux avoir tous les avion_ticket

qui ont un supplément_reduction combinés à tous les avion_ticket qui n'ont
pas de supplément_reduction. Il faut travailler avec 2 resultats distincts
combinées avec UNION. Essaie ceci:

SELECT Avion_ticket.at_num_billet AS at_num_billet,
Avion_ticket.at_date_emission AS at_date_emission,
Avion_ticket.at_cleunik AS at_cleunik,
Avion_ticket.at_val_facial AS at_val_facial,
suplement_reduction.at_cleunik AS at_cleunik_su,
suplement_reduction.sn_prix AS sn_prix,
suplement_reduction.ctpro_cleunik AS ctpro_cleunik,
suplement_reduction.snlib_cleunik AS snlib_cleunik
FROM Avion_ticket
LEFT OUTER JOIN suplement_reduction ON
Avion_ticket.at_cleunik = suplement_reduction.at_cleunik
WHERE Avion_ticket.at_date_emission BETWEEN {Param1} AND {Param2}
AND suplement_reduction.ctpro_cleunik = 1
AND suplement_reduction.snlib_cleunik = -1
UNION ALL
SELECT Avion_ticket.at_num_billet AS at_num_billet,
Avion_ticket.at_date_emission AS at_date_emission,
Avion_ticket.at_cleunik AS at_cleunik,
Avion_ticket.at_val_facial AS at_val_facial,
0 AS at_cleunik_su,
0 AS sn_prix,
0 AS ctpro_cleunik,
0 AS snlib_cleunik
FROM Avion_ticket
WHERE Avion_ticket.at_date_emission BETWEEN {Param1} AND {param2}
AND Avion_ticket.at_cleunik NOT IN
(SELECT DISTINCT suplement_reduction.at_cleunik
FROM supplement_reduction)
ORDER BY at_num_billet ASC, at_date_emission ASC

Christian Potvin
Beaulieu Canada

Bonjour..

Le fait de mettre des conditions dans la table suplement_reduction fait que
vous n'aurez que les enregistrements qui répondent à cette condition.
Et si l'enregistrement n'existe pas, il n'apparait pas, puisqu'il ne répont
pas. Le lien Outer Join n'y changera rien.
Il faudrait ajouter une condition acceptant les enregistrements n'ayant pas
de valeur, donc NULL.
Bonne chance
Posté le 17 août 2004 - 16:52
Grand merci pour la réponse ,
le problème est que la même requête fonctionne correctement sur une base HF7
avec les mêmes fichiers.

je continue ....

"Michel Lahellec" <kerloic.armor@sympatico.ca> a écrit dans le message de
news:4121f95d$1@news.pcsoft.fr...


"Christian Potvin" <cpotvin@beaulieucanada.ca> wrote:


"Pierre Flandre" <pierre.flandre@japanpitravel.com> wrote:

Débutant en windev , j'ai la question suivante concernant les requêtes.

wd8 314
soit 2 fichiers

avion_ticket o,n
suplement_reduction 1,1

base mysql avec accès natif

j'effectue la requête SQL suivante : (avec le générateur de requête

windev)

SELECT Avion_ticket.at_num_billet AS at_num_billet,
Avion_ticket.at_date_emission AS at_date_emission,
Avion_ticket.at_cleunik AS at_cleunik,
Avion_ticket.at_val_facial AS at_val_facial,
suplement_reduction.at_cleunik AS at_cleunik_su,
suplement_reduction.sn_prix AS sn_prix,
suplement_reduction.ctpro_cleunik AS ctpro_cleunik,
suplement_reduction.snlib_cleunik AS snlib_cleunik
FROM Avion_ticket LEFT OUTER JOIN suplement_reduction ON
Avion_ticket.at_cleunik = suplement_reduction.at_cleunik
WHERE Avion_ticket.at_date_emission BETWEEN {Param1} AND {Param2}
AND suplement_reduction.ctpro_cleunik = 1
AND suplement_reduction.snlib_cleunik = -1
ORDER BY at_num_billet ASC, at_date_emission ASC

cela m'affiche tous les avion_ticket+le suplement reduction

correspondant
à
la requête .... sauf les avion_ticket qui n'ont pas de

suplement_reduction
Si je retire mes conditions sur le fichier suplement_reduction, tous les
avion_ticket sont bien affichés même ceux sans suplement_reduction

comment faire pour qu'il m'affiche aussi les avion_ticket qui n'ont pas
de

suplement_reduction dans la même table

D'avance merci
Pierre



D'après ce que je comprends de ta demande, tu veux avoir tous les

avion_ticket
> >qui ont un supplément_reduction combinés à tous les avion_ticket qui
n'ont
pas de supplément_reduction. Il faut travailler avec 2 resultats

distincts
combinées avec UNION. Essaie ceci:

SELECT Avion_ticket.at_num_billet AS at_num_billet,
Avion_ticket.at_date_emission AS at_date_emission,
Avion_ticket.at_cleunik AS at_cleunik,
Avion_ticket.at_val_facial AS at_val_facial,
suplement_reduction.at_cleunik AS at_cleunik_su,
suplement_reduction.sn_prix AS sn_prix,
suplement_reduction.ctpro_cleunik AS ctpro_cleunik,
suplement_reduction.snlib_cleunik AS snlib_cleunik
FROM Avion_ticket
LEFT OUTER JOIN suplement_reduction ON
Avion_ticket.at_cleunik = suplement_reduction.at_cleunik
WHERE Avion_ticket.at_date_emission BETWEEN {Param1} AND {Param2}
AND suplement_reduction.ctpro_cleunik = 1
AND suplement_reduction.snlib_cleunik = -1
UNION ALL
SELECT Avion_ticket.at_num_billet AS at_num_billet,
Avion_ticket.at_date_emission AS at_date_emission,
Avion_ticket.at_cleunik AS at_cleunik,
Avion_ticket.at_val_facial AS at_val_facial,
0 AS at_cleunik_su,
0 AS sn_prix,
0 AS ctpro_cleunik,
0 AS snlib_cleunik
FROM Avion_ticket
WHERE Avion_ticket.at_date_emission BETWEEN {Param1} AND {param2}
AND Avion_ticket.at_cleunik NOT IN
(SELECT DISTINCT suplement_reduction.at_cleunik
FROM supplement_reduction)
ORDER BY at_num_billet ASC, at_date_emission ASC

Christian Potvin
Beaulieu Canada

Bonjour..


Le fait de mettre des conditions dans la table suplement_reduction fait

que
vous n'aurez que les enregistrements qui répondent à cette condition.
Et si l'enregistrement n'existe pas, il n'apparait pas, puisqu'il ne

répont
pas. Le lien Outer Join n'y changera rien.
Il faudrait ajouter une condition acceptant les enregistrements n'ayant

pas
de valeur, donc NULL.
Bonne chance