Salut !
Je suis en train de migrer une application de Centura=20
SQLBase 7.5.1 sous SQL Server et je recontre quelques=20
probl=E8mes avec les jointures externes. Avec SQLBase de=20
Centura, il est possible de faire une jointure externe=20
entre une colonne et une variable. Cette fonctionnalit=E9=20
n'est pas pr=E9sente sous SQL Server o=F9 la jointure externe=20
est effectu=E9e entre deux colonnes. Comment puis-je=20
r=E9soudre ce probl=E8me.
Merci d'avance pour toute vos remarques et suggestions
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
Fred BROUARD
Donnez un exemple précis, car je ne voit ni l'utilité de ce type de jointure sauf à ce qu'elle complémente un lien entre deux tables...
A +
KOUASSI Yao-Koffi a écrit:
Salut ! Je suis en train de migrer une application de Centura SQLBase 7.5.1 sous SQL Server et je recontre quelques problèmes avec les jointures externes. Avec SQLBase de Centura, il est possible de faire une jointure externe entre une colonne et une variable. Cette fonctionnalité n'est pas présente sous SQL Server où la jointure externe est effectuée entre deux colonnes. Comment puis-je résoudre ce problème. Merci d'avance pour toute vos remarques et suggestions
-- Frédéric BROUARD, MVP Microsoft SQL Server. Langage SQL / Delphi / web Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com ****************** mailto: ******************
Donnez un exemple précis, car je ne voit ni l'utilité de ce type de
jointure sauf à ce qu'elle complémente un lien entre deux tables...
A +
KOUASSI Yao-Koffi a écrit:
Salut !
Je suis en train de migrer une application de Centura
SQLBase 7.5.1 sous SQL Server et je recontre quelques
problèmes avec les jointures externes. Avec SQLBase de
Centura, il est possible de faire une jointure externe
entre une colonne et une variable. Cette fonctionnalité
n'est pas présente sous SQL Server où la jointure externe
est effectuée entre deux colonnes. Comment puis-je
résoudre ce problème.
Merci d'avance pour toute vos remarques et suggestions
--
Frédéric BROUARD, MVP Microsoft SQL Server. Langage SQL / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto:brouardf@club-internet.fr ******************
Donnez un exemple précis, car je ne voit ni l'utilité de ce type de jointure sauf à ce qu'elle complémente un lien entre deux tables...
A +
KOUASSI Yao-Koffi a écrit:
Salut ! Je suis en train de migrer une application de Centura SQLBase 7.5.1 sous SQL Server et je recontre quelques problèmes avec les jointures externes. Avec SQLBase de Centura, il est possible de faire une jointure externe entre une colonne et une variable. Cette fonctionnalité n'est pas présente sous SQL Server où la jointure externe est effectuée entre deux colonnes. Comment puis-je résoudre ce problème. Merci d'avance pour toute vos remarques et suggestions
-- Frédéric BROUARD, MVP Microsoft SQL Server. Langage SQL / Delphi / web Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com ****************** mailto: ******************
KOUASSI Yao-Koffi
Ok Fred !
Nous considérons donc les deux tables PARAMETRES et REDEVANCECLIENT.
Table PARAMETRES ****************
Numero DateMaj Centre Code libelleCode ---------------------------------------------------- 001 21-JAN-2000 000 000001 Pays 101 21-APR-2004 000 000001 Critère 1 101 21-APR-2004 000 000002 Critère 2 101 22-APR-2001 000 000003 Critère 3
Sous SQLBase, lorsque j'exécute la requête suivante :
SELECT COUNT(R.Variante), P.Code, P.LibelleCode FROM RedevanceClient R, Parametres P WHERE R.Centre(+)='011' AND R.Commune(+)='00000' AND R.Produit(+)='01' AND R.Redevance(+)='11' AND (P.Centre='000' OR P.Centre = R.Centre(+) ) AND P.Num1 AND R.Critere(+)= @RIGHT (P.Code, 2) GROUP BY P.Code, P.Libelle
Il est primordial que je fasse ici quelques remarques : 1- Sous SQLBase, la jointure externe est faite par (+) 2- La colonne jointe reçoit le (+) c'est-à-dire que la colonne qui est suceptible de ne pas fournir de résultat 3- La fonction @RIGHT possède comme équivalente sous SQL Serve la fonction RIGHT
Si je devais trouver une équivalente de cette requête sous SQL Server, ce serait :
SELECT COUNT(R.Variante), P.Code, P.LibelleCode FROM RedevanceClient R, Parametres P WHERE R.Centre =* '011' AND R.Commune =* '00000' AND R.Produit =* '01' AND R.Redevance =* '11' AND (P.Centre='000' OR P.Centre *= R.Centre) AND P.Num1 AND R.Critere =* RIGHT(P.Code, 2) GROUP BY P.Code, P.Libelle , mais le Hic est que la jointure externe sous SQL Server concerne forcément deux colonnes, et c'est ça qui me bloque. Merci
Ok Fred !
Nous considérons donc les deux tables PARAMETRES et
REDEVANCECLIENT.
Table PARAMETRES
****************
Numero DateMaj Centre Code libelleCode
----------------------------------------------------
001 21-JAN-2000 000 000001 Pays
101 21-APR-2004 000 000001 Critère 1
101 21-APR-2004 000 000002 Critère 2
101 22-APR-2001 000 000003 Critère 3
Sous SQLBase, lorsque j'exécute la requête suivante :
SELECT COUNT(R.Variante), P.Code, P.LibelleCode FROM
RedevanceClient R, Parametres P WHERE R.Centre(+)='011'
AND R.Commune(+)='00000' AND R.Produit(+)='01' AND
R.Redevance(+)='11' AND (P.Centre='000' OR P.Centre =
R.Centre(+) ) AND P.Num=101 AND R.Critere(+)= @RIGHT
(P.Code, 2) GROUP BY P.Code, P.Libelle
Il est primordial que je fasse ici quelques remarques :
1- Sous SQLBase, la jointure externe est faite par (+)
2- La colonne jointe reçoit le (+) c'est-à-dire que la
colonne qui est suceptible de ne pas fournir de résultat
3- La fonction @RIGHT possède comme équivalente sous SQL
Serve la fonction RIGHT
Si je devais trouver une équivalente de cette requête sous
SQL Server, ce serait :
SELECT COUNT(R.Variante), P.Code, P.LibelleCode FROM
RedevanceClient R, Parametres P WHERE R.Centre =* '011'
AND R.Commune =* '00000' AND R.Produit =* '01' AND
R.Redevance =* '11' AND (P.Centre='000' OR P.Centre *=
R.Centre) AND P.Num=101 AND R.Critere =* RIGHT(P.Code, 2)
GROUP BY P.Code, P.Libelle
, mais le Hic est que la jointure externe sous SQL Server
concerne forcément deux colonnes, et c'est ça qui me
bloque.
Merci
Sous SQLBase, lorsque j'exécute la requête suivante :
SELECT COUNT(R.Variante), P.Code, P.LibelleCode FROM RedevanceClient R, Parametres P WHERE R.Centre(+)='011' AND R.Commune(+)='00000' AND R.Produit(+)='01' AND R.Redevance(+)='11' AND (P.Centre='000' OR P.Centre = R.Centre(+) ) AND P.Num1 AND R.Critere(+)= @RIGHT (P.Code, 2) GROUP BY P.Code, P.Libelle
Il est primordial que je fasse ici quelques remarques : 1- Sous SQLBase, la jointure externe est faite par (+) 2- La colonne jointe reçoit le (+) c'est-à-dire que la colonne qui est suceptible de ne pas fournir de résultat 3- La fonction @RIGHT possède comme équivalente sous SQL Serve la fonction RIGHT
Si je devais trouver une équivalente de cette requête sous SQL Server, ce serait :
SELECT COUNT(R.Variante), P.Code, P.LibelleCode FROM RedevanceClient R, Parametres P WHERE R.Centre =* '011' AND R.Commune =* '00000' AND R.Produit =* '01' AND R.Redevance =* '11' AND (P.Centre='000' OR P.Centre *= R.Centre) AND P.Num1 AND R.Critere =* RIGHT(P.Code, 2) GROUP BY P.Code, P.Libelle , mais le Hic est que la jointure externe sous SQL Server concerne forcément deux colonnes, et c'est ça qui me bloque. Merci
Fred BROUARD
L'équivalent en SQL normatif (à l'exception de la fonction RIGHT) et qui doit tourner comme tu le souhaites sous SQL Server
SELECT COUNT(R.Variante), P.Code, P.LibelleCode FROM RedevanceClient R LEFT OUTER JOIN Parametres P ON R.Critere = RIGHT(P.Code, 2) AND R.Centre='011' AND R.Commune='00000' AND R.Produit='01' AND R.Redevance='11' AND (P.Centre='000' OR P.Centre = R.Centre ) AND P.Num1 GROUP BY P.Code, P.Libelle
A +
KOUASSI Yao-Koffi a écrit:
Ok Fred !
Nous considérons donc les deux tables PARAMETRES et REDEVANCECLIENT.
Table PARAMETRES ****************
Numero DateMaj Centre Code libelleCode ---------------------------------------------------- 001 21-JAN-2000 000 000001 Pays 101 21-APR-2004 000 000001 Critère 1 101 21-APR-2004 000 000002 Critère 2 101 22-APR-2001 000 000003 Critère 3
Sous SQLBase, lorsque j'exécute la requête suivante :
SELECT COUNT(R.Variante), P.Code, P.LibelleCode FROM RedevanceClient R, Parametres P WHERE R.Centre(+)='011' AND R.Commune(+)='00000' AND R.Produit(+)='01' AND R.Redevance(+)='11' AND (P.Centre='000' OR P.Centre = R.Centre(+) ) AND P.Num1 AND R.Critere(+)= @RIGHT (P.Code, 2) GROUP BY P.Code, P.Libelle
Il est primordial que je fasse ici quelques remarques : 1- Sous SQLBase, la jointure externe est faite par (+) 2- La colonne jointe reçoit le (+) c'est-à-dire que la colonne qui est suceptible de ne pas fournir de résultat 3- La fonction @RIGHT possède comme équivalente sous SQL Serve la fonction RIGHT
Si je devais trouver une équivalente de cette requête sous SQL Server, ce serait :
SELECT COUNT(R.Variante), P.Code, P.LibelleCode FROM RedevanceClient R, Parametres P WHERE R.Centre =* '011' AND R.Commune =* '00000' AND R.Produit =* '01' AND R.Redevance =* '11' AND (P.Centre='000' OR P.Centre *= R.Centre) AND P.Num1 AND R.Critere =* RIGHT(P.Code, 2) GROUP BY P.Code, P.Libelle , mais le Hic est que la jointure externe sous SQL Server concerne forcément deux colonnes, et c'est ça qui me bloque. Merci
-- Frédéric BROUARD, MVP Microsoft SQL Server. Langage SQL / Delphi / web Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com ****************** mailto: ******************
L'équivalent en SQL normatif (à l'exception de la fonction RIGHT) et qui
doit tourner comme tu le souhaites sous SQL Server
SELECT COUNT(R.Variante), P.Code, P.LibelleCode
FROM RedevanceClient R
LEFT OUTER JOIN Parametres P
ON R.Critere = RIGHT(P.Code, 2)
AND R.Centre='011'
AND R.Commune='00000'
AND R.Produit='01'
AND R.Redevance='11'
AND (P.Centre='000' OR P.Centre = R.Centre )
AND P.Num1
GROUP BY P.Code, P.Libelle
A +
KOUASSI Yao-Koffi a écrit:
Ok Fred !
Nous considérons donc les deux tables PARAMETRES et
REDEVANCECLIENT.
Table PARAMETRES
****************
Numero DateMaj Centre Code libelleCode
----------------------------------------------------
001 21-JAN-2000 000 000001 Pays
101 21-APR-2004 000 000001 Critère 1
101 21-APR-2004 000 000002 Critère 2
101 22-APR-2001 000 000003 Critère 3
Sous SQLBase, lorsque j'exécute la requête suivante :
SELECT COUNT(R.Variante), P.Code, P.LibelleCode FROM
RedevanceClient R, Parametres P WHERE R.Centre(+)='011'
AND R.Commune(+)='00000' AND R.Produit(+)='01' AND
R.Redevance(+)='11' AND (P.Centre='000' OR P.Centre =
R.Centre(+) ) AND P.Num1 AND R.Critere(+)= @RIGHT
(P.Code, 2) GROUP BY P.Code, P.Libelle
Il est primordial que je fasse ici quelques remarques :
1- Sous SQLBase, la jointure externe est faite par (+)
2- La colonne jointe reçoit le (+) c'est-à-dire que la
colonne qui est suceptible de ne pas fournir de résultat
3- La fonction @RIGHT possède comme équivalente sous SQL
Serve la fonction RIGHT
Si je devais trouver une équivalente de cette requête sous
SQL Server, ce serait :
SELECT COUNT(R.Variante), P.Code, P.LibelleCode FROM
RedevanceClient R, Parametres P WHERE R.Centre =* '011'
AND R.Commune =* '00000' AND R.Produit =* '01' AND
R.Redevance =* '11' AND (P.Centre='000' OR P.Centre *=
R.Centre) AND P.Num1 AND R.Critere =* RIGHT(P.Code, 2)
GROUP BY P.Code, P.Libelle
, mais le Hic est que la jointure externe sous SQL Server
concerne forcément deux colonnes, et c'est ça qui me
bloque.
Merci
--
Frédéric BROUARD, MVP Microsoft SQL Server. Langage SQL / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto:brouardf@club-internet.fr ******************
L'équivalent en SQL normatif (à l'exception de la fonction RIGHT) et qui doit tourner comme tu le souhaites sous SQL Server
SELECT COUNT(R.Variante), P.Code, P.LibelleCode FROM RedevanceClient R LEFT OUTER JOIN Parametres P ON R.Critere = RIGHT(P.Code, 2) AND R.Centre='011' AND R.Commune='00000' AND R.Produit='01' AND R.Redevance='11' AND (P.Centre='000' OR P.Centre = R.Centre ) AND P.Num1 GROUP BY P.Code, P.Libelle
A +
KOUASSI Yao-Koffi a écrit:
Ok Fred !
Nous considérons donc les deux tables PARAMETRES et REDEVANCECLIENT.
Table PARAMETRES ****************
Numero DateMaj Centre Code libelleCode ---------------------------------------------------- 001 21-JAN-2000 000 000001 Pays 101 21-APR-2004 000 000001 Critère 1 101 21-APR-2004 000 000002 Critère 2 101 22-APR-2001 000 000003 Critère 3
Sous SQLBase, lorsque j'exécute la requête suivante :
SELECT COUNT(R.Variante), P.Code, P.LibelleCode FROM RedevanceClient R, Parametres P WHERE R.Centre(+)='011' AND R.Commune(+)='00000' AND R.Produit(+)='01' AND R.Redevance(+)='11' AND (P.Centre='000' OR P.Centre = R.Centre(+) ) AND P.Num1 AND R.Critere(+)= @RIGHT (P.Code, 2) GROUP BY P.Code, P.Libelle
Il est primordial que je fasse ici quelques remarques : 1- Sous SQLBase, la jointure externe est faite par (+) 2- La colonne jointe reçoit le (+) c'est-à-dire que la colonne qui est suceptible de ne pas fournir de résultat 3- La fonction @RIGHT possède comme équivalente sous SQL Serve la fonction RIGHT
Si je devais trouver une équivalente de cette requête sous SQL Server, ce serait :
SELECT COUNT(R.Variante), P.Code, P.LibelleCode FROM RedevanceClient R, Parametres P WHERE R.Centre =* '011' AND R.Commune =* '00000' AND R.Produit =* '01' AND R.Redevance =* '11' AND (P.Centre='000' OR P.Centre *= R.Centre) AND P.Num1 AND R.Critere =* RIGHT(P.Code, 2) GROUP BY P.Code, P.Libelle , mais le Hic est que la jointure externe sous SQL Server concerne forcément deux colonnes, et c'est ça qui me bloque. Merci
-- Frédéric BROUARD, MVP Microsoft SQL Server. Langage SQL / Delphi / web Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com ****************** mailto: ******************
KOUASSI Yao-Koffi
Requête testée avec succès ! Je viens de consulter MSDN qui préconise d'ailleurs d'utiliser LEFT OUTER JOIN au lieu de =* (ou *=) pour réaliser les jointures externes. Merci beaucoup pour cette solution et bonne journée !
Requête testée avec succès !
Je viens de consulter MSDN qui préconise d'ailleurs
d'utiliser LEFT OUTER JOIN au lieu de =* (ou *=) pour
réaliser les jointures externes.
Merci beaucoup pour cette solution et bonne journée !
Requête testée avec succès ! Je viens de consulter MSDN qui préconise d'ailleurs d'utiliser LEFT OUTER JOIN au lieu de =* (ou *=) pour réaliser les jointures externes. Merci beaucoup pour cette solution et bonne journée !
Fred BROUARD
A lire : http://sqlpro.developpez.com/SQL_AZ_3.html#JOIN_types
A +
KOUASSI Yao-Koffi a écrit:
Requête testée avec succès ! Je viens de consulter MSDN qui préconise d'ailleurs d'utiliser LEFT OUTER JOIN au lieu de =* (ou *=) pour réaliser les jointures externes. Merci beaucoup pour cette solution et bonne journée !
-- Frédéric BROUARD, MVP Microsoft SQL Server. Langage SQL / Delphi / web Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com ****************** mailto: ******************
A lire :
http://sqlpro.developpez.com/SQL_AZ_3.html#JOIN_types
A +
KOUASSI Yao-Koffi a écrit:
Requête testée avec succès !
Je viens de consulter MSDN qui préconise d'ailleurs
d'utiliser LEFT OUTER JOIN au lieu de =* (ou *=) pour
réaliser les jointures externes.
Merci beaucoup pour cette solution et bonne journée !
--
Frédéric BROUARD, MVP Microsoft SQL Server. Langage SQL / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto:brouardf@club-internet.fr ******************
A lire : http://sqlpro.developpez.com/SQL_AZ_3.html#JOIN_types
A +
KOUASSI Yao-Koffi a écrit:
Requête testée avec succès ! Je viens de consulter MSDN qui préconise d'ailleurs d'utiliser LEFT OUTER JOIN au lieu de =* (ou *=) pour réaliser les jointures externes. Merci beaucoup pour cette solution et bonne journée !
-- Frédéric BROUARD, MVP Microsoft SQL Server. Langage SQL / Delphi / web Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com ****************** mailto: ******************
Fred BROUARD
A lire : http://sqlpro.developpez.com/SQL_AZ_3.html#JOIN_types
A +
KOUASSI Yao-Koffi a écrit:
Requête testée avec succès ! Je viens de consulter MSDN qui préconise d'ailleurs d'utiliser LEFT OUTER JOIN au lieu de =* (ou *=) pour réaliser les jointures externes. Merci beaucoup pour cette solution et bonne journée !
-- Frédéric BROUARD, MVP Microsoft SQL Server. Langage SQL / Delphi / web Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com ****************** mailto: ******************
A lire :
http://sqlpro.developpez.com/SQL_AZ_3.html#JOIN_types
A +
KOUASSI Yao-Koffi a écrit:
Requête testée avec succès !
Je viens de consulter MSDN qui préconise d'ailleurs
d'utiliser LEFT OUTER JOIN au lieu de =* (ou *=) pour
réaliser les jointures externes.
Merci beaucoup pour cette solution et bonne journée !
--
Frédéric BROUARD, MVP Microsoft SQL Server. Langage SQL / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto:brouardf@club-internet.fr ******************
A lire : http://sqlpro.developpez.com/SQL_AZ_3.html#JOIN_types
A +
KOUASSI Yao-Koffi a écrit:
Requête testée avec succès ! Je viens de consulter MSDN qui préconise d'ailleurs d'utiliser LEFT OUTER JOIN au lieu de =* (ou *=) pour réaliser les jointures externes. Merci beaucoup pour cette solution et bonne journée !
-- Frédéric BROUARD, MVP Microsoft SQL Server. Langage SQL / Delphi / web Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com ****************** mailto: ******************