[RESOLU] problème requete SQL 2008

problème requete SQL 2008 [RESOLU] - SQL/NoSQL - Programmation

Marsh Posté le 25-03-2011 à 11:49:12    

Bonjour,  
 
voila j'ai une requête qui fonctionné très bien sur SQL 2000, et maintenant que je suis passé à SQL 2008 elle ne marche pas.  
 
Message erreur "La requete utilise des opérateurs de jointure externe non AINSI...."  
 
SELECT bide.IDNIP AS 'NIP', bide.IDNOM AS 'NOM', bide.IDPREN, CONVERT(VARCHAR(10),IDDATNAIS,103) AS 'DATE_NAISSANCE', bsej.SESEJ, bsej.SESTATSEJ, CONVERT(VARCHAR(10),INDATDEB,103) AS 'DATE_INTERVENTION', mcaactes.COD_ACTE, auf.UFCOD AS 'UF_EXECUTANTE', aperso.PENOM  
FROM MEDIANE.dbo.aperso aperso, MEDIANE.dbo.auf auf, MEDIANE.dbo.bide bide, MEDIANE.dbo.bsej bsej, MEDIANE.dbo.mcaactes mcaactes, MEDIANE.dbo.minterv minterv  
WHERE mcaactes.INCLEUNIK = minterv.INCLEUNIK AND bsej.SECLEUNIK = minterv.SECLEUNIK AND bide.IDCLEUNIK = bsej.IDCLEUNIK AND mcaactes.PEEXE = aperso.PECLEUNIK AND auf.UFCLEUNIK = mcaactes.UFEXE  
ORDER BY minterv.INDATDEB DESC  
 
j'ai essayer d'utiliser des JOIN...  
 
SELECT bide.IDNIP AS 'NIP', bide.IDNOM AS 'NOM', bide.IDPREN, CONVERT(VARCHAR(10),IDDATNAIS,103) AS 'DATE_NAISSANCE', bsej.SESEJ, bsej.SESTATSEJ, CONVERT(VARCHAR(10),INDATDEB,103) AS 'DATE_INTERVENTION', mcaactes.COD_ACTE, auf.UFCOD AS 'UF_EXECUTANTE', aperso.PENOM
FROM MEDIANE.dbo.aperso aperso, MEDIANE.dbo.auf auf, MEDIANE.dbo.bide bide, MEDIANE.dbo.bsej bsej, MEDIANE.dbo.mcaactes mcaactes, MEDIANE.dbo.minterv minterv
INNER JOIN minterv mv ON (mcaactes.INCLEUNIK = mv.INCLEUNIK AND bsej.SECLEUNIK = mv.SECLEUNIK)
INNER JOIN bide bi ON bi.IDCLEUNIK = bsej.IDCLEUNIK  
INNER JOIN mcaactes ms ON (ms.PEEXE = aperso.PECLEUNIK AND auf.UFCLEUNIK = ms.UFEXE)
ORDER BY minterv.INDATDEB DESC
 
et j'ai ce message d'erreur :  
 
"L'identificateur en plusieurs parties 'XXXXXXX' ne peut pas être lié..."

Message cité 1 fois
Message édité par doumbe26 le 04-04-2011 à 09:23:57
Reply

Marsh Posté le 25-03-2011 à 11:49:12   

Reply

Marsh Posté le 25-03-2011 à 13:14:14    

doumbe26 a écrit :


 
j'ai essayer d'utiliser des JOIN...  
 
SELECT bide.IDNIP AS 'NIP', bide.IDNOM AS 'NOM', bide.IDPREN, CONVERT(VARCHAR(10),IDDATNAIS,103) AS 'DATE_NAISSANCE', bsej.SESEJ, bsej.SESTATSEJ, CONVERT(VARCHAR(10),INDATDEB,103) AS 'DATE_INTERVENTION', mcaactes.COD_ACTE, auf.UFCOD AS 'UF_EXECUTANTE', aperso.PENOM
FROM MEDIANE.dbo.aperso aperso, MEDIANE.dbo.auf auf, MEDIANE.dbo.bide bide, MEDIANE.dbo.bsej bsej, MEDIANE.dbo.mcaactes mcaactes, MEDIANE.dbo.minterv minterv
INNER JOIN minterv mv ON (mcaactes.INCLEUNIK = mv.INCLEUNIK AND bsej.SECLEUNIK = mv.SECLEUNIK)
INNER JOIN bide bi ON bi.IDCLEUNIK = bsej.IDCLEUNIK  
INNER JOIN mcaactes ms ON (ms.PEEXE = aperso.PECLEUNIK AND auf.UFCLEUNIK = ms.UFEXE)
ORDER BY minterv.INDATDEB DESC
 
et j'ai ce message d'erreur :  
 
"L'identificateur en plusieurs parties 'XXXXXXX' ne peut pas être lié..."


le problème vient de la partie en gras : tu ne dois pas indiquer toutes tes tables dans le FROM en cas de jointure, mais utiliser la syntaxe suivante :
 
FROM table1 t1 INNER JOIN table2 t2 ON t1.champ = t2.champ INNER JOIN table t3 ON t2.champ = t3.champ, etc..;
tu peux éventuellement regrouper tous les INNER JOIN et les ON


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 25-03-2011 à 13:51:36    

Harkonnen a écrit :


le problème vient de la partie en gras : tu ne dois pas indiquer toutes tes tables dans le FROM en cas de jointure, mais utiliser la syntaxe suivante :
 
FROM table1 t1 INNER JOIN table2 t2 ON t1.champ = t2.champ INNER JOIN table t3 ON t2.champ = t3.champ, etc..;
tu peux éventuellement regrouper tous les INNER JOIN et les ON


 
d'accord par contre j'ai un problème pour la partie en gras ci-dessous (une table jointe à 2 table):  
 
SELECT bide.IDNIP AS 'NIP', bide.IDNOM AS 'NOM', bide.IDPREN, CONVERT(VARCHAR(10),IDDATNAIS,103) AS 'DATE_NAISSANCE', bsej.SESEJ, bsej.SESTATSEJ, CONVERT(VARCHAR(10),INDATDEB,103) AS 'DATE_INTERVENTION', mcaactes.COD_ACTE, auf.UFCOD AS 'UF_EXECUTANTE', aperso.PENOM  
FROM mcaactes INNER JOIN minterv ON mcaactes.INCLEUNIK = minterv.INCLEUNIK,
mcaactes INNER JOIN aperso ON mcaactes.PEEXE = aperso.PECLEUNIK,

bsej INNER JOIN minterv ON bsej.SECLEUNIK = minterv.SECLEUNIK,
bide INNER JOIN bsej ON bide.IDCLEUNIK = bsej.IDCLEUNIK,
auf INNER JOIN mcaactes ON auf.UFCLEUNIK = mcaactes.UFEXE
ORDER BY minterv.INDATDEB DESC
 
Sinon le reste à l'aire correct ?

Reply

Marsh Posté le 25-03-2011 à 13:57:26    

Ce n'est pas comme ca que les join fonctionnent.
 
D'abord lis la doc sur les joins (http://msdn.microsoft.com/en-us/li [...] L.80).aspx et http://msdn.microsoft.com/en-us/library/ms177634.aspx).
 
Tu peux partir de ca, mais il manque des infos:

Code :
  1. SELECT bide.IDNIP AS 'NIP'
  2.        , bide.IDNOM AS 'NOM'
  3.        , bide.IDPREN
  4.        , CONVERT(VARCHAR(10),IDDATNAIS,103) AS 'DATE_NAISSANCE'
  5.        , bsej.SESEJ
  6.        , bsej.SESTATSEJ
  7.        , CONVERT(VARCHAR(10),INDATDEB,103) AS 'DATE_INTERVENTION'
  8.        , mcaactes.COD_ACTE
  9.        , auf.UFCOD AS 'UF_EXECUTANTE'
  10.        , aperso.PENOM  
  11. FROM mcaactes
  12.     INNER JOIN minterv ON mcaactes.INCLEUNIK = minterv.INCLEUNIK
  13.     INNER JOIN aperso ON mcaactes.PEEXE = aperso.PECLEUNIK
  14.     INNER JOIN minterv ON bsej.SECLEUNIK = minterv.SECLEUNIK
  15.     INNER JOIN bsej ON bide.IDCLEUNIK = bsej.IDCLEUNIK
  16.     INNER JOIN auf ON auf.UFCLEUNIK = mcaactes.UFEXE
  17.     INNER JOIN bide ON ?? = ??
  18. ORDER BY minterv.INDATDEB DESC


 
Sans le dernier join tu finis avec un produit cartésien et ce n'est probablement pas ce que tu cherches.


Message édité par Oliiii le 25-03-2011 à 14:01:32
Reply

Marsh Posté le 25-03-2011 à 15:44:42    

c'est Ok pour cette requète :  

Code :
  1. SELECT bide.IDNIP
  2.       , bide.IDNOM
  3.       , bide.IDPREN
  4.       , CONVERT(VARCHAR(10),IDDATNAIS,103)
  5.       , bsej.SESEJ
  6.       , bsej.SESTATSEJ
  7.       , CONVERT(VARCHAR(10),INDATDEB,103)
  8.       , mcaactes.COD_ACTE
  9.       , auf.UFCOD
  10.       , aperso.PENOM  
  11. FROM mcaactes
  12.    INNER JOIN minterv ON mcaactes.INCLEUNIK = minterv.INCLEUNIK
  13.    INNER JOIN bsej ON bsej.SECLEUNIK = minterv.SECLEUNIK
  14.    INNER JOIN bide ON bide.IDCLEUNIK = bsej.IDCLEUNIK
  15.    INNER JOIN auf ON auf.UFCLEUNIK = mcaactes.UFEXE
  16.    INNER JOIN aperso ON mcaactes.PEEXE = aperso.PECLEUNIK
  17.  
  18. ORDER BY minterv.INDATDEB DESC


 
par contre j'ai trouvé une requète avec des *= a transformer aussi en JOIN... mais j'ai des erreur 'l'identificateur en plusieur parties "bufac.ufcleunik" et "bactsej.a1cleunik" ne peut pas etre lié".
 

Code :
  1. SELECT  BIDE.IDNIP  
  2.     ,BIDE.IDNOM  
  3.     ,BIDE.IDPREN
  4.     ,CONVERT(VARCHAR(10),IDDATNAIS,103)
  5.     ,BSEJ.SESEJ
  6.     ,BSEJ.SESTATSEJ
  7.     ,CONVERT(VARCHAR(10),MACTES.ACDAT,103)
  8.     ,ACOT.C5LETCLE
  9.     ,MACTES.ACCOEF
  10.     ,APERSO.PENOM
  11.     ,AUF.UFCOD
  12.     ,MACTES.ACNBGR
  13. FROM MACTES
  14.     LEFT OUTER JOIN ACOT ON MACTES.C5CLEUNIK = ACOT.C5CLEUNIK
  15.     LEFT OUTER JOIN BTABIVG ON MACTES.IVCLEUNIK = BTABIVG.IVCLEUNIK
  16.     INNER JOIN BSEJ ON MACTES.SECLEUNIK = BSEJ.SECLEUNIK
  17.     LEFT OUTER JOIN APERSO ON MACTES.PECLEUNIK = APERSO.PECLEUNIK
  18.     LEFT OUTER JOIN MMCDAM ON MACTES.CDCLEUNIK = MMCDAM.CDCLEUNIK
  19.     INNER JOIN BIDE ON BSEJ.IDCLEUNIK = BIDE.IDCLEUNIK
  20.     LEFT OUTER JOIN BNABM ON MACTES.NBCLEUNIK = BNABM.NBCLEUNIK
  21.     INNER JOIN auf ON bufac.UFCLEUNIK = auf.ufcleunik
  22.     INNER JOIN bufac ON bufac.ACCLEUNIK = mactes.ACCLEUNIK
  23.     AND NOT EXISTS  
  24.     (SELECT *
  25.     FROM BENC
  26.         INNER JOIN BENCD ON BENCD.A1CLEUNIK = BACTSEJ.A1CLEUNIK
  27.         INNER JOIN BACTSEJ ON BACTSEJ.ACCLEUNIK=MACTES.ACCLEUNIK
  28.     WHERE (COALESCE(BENC.ENNEG,0)=1 OR
  29.         COALESCE(BENC.ENANN,0)=1))
  30. WHERE  bufac.UFACT=1 AND
  31.     DATEPART(yyyy,MACTES.ACDAT)='2011'
  32. ORDER BY MACTES.ACDAT DESC


Message édité par doumbe26 le 25-03-2011 à 15:54:07
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed