Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1485 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [RESOLU] problème requete SQL 2008

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[RESOLU] problème requete SQL 2008

n°2066005
doumbe26
Posté le 25-03-2011 à 11:49:12  profilanswer
 

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
mood
Publicité
Posté le 25-03-2011 à 11:49:12  profilanswer
 

n°2066045
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 25-03-2011 à 13:14:14  profilanswer
 

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)
n°2066056
doumbe26
Posté le 25-03-2011 à 13:51:36  profilanswer
 

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 ?

n°2066058
Oliiii
Posté le 25-03-2011 à 13:57:26  profilanswer
 

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
n°2066110
doumbe26
Posté le 25-03-2011 à 15:44:42  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [RESOLU] problème requete SQL 2008

 

Sujets relatifs
[CSS] Problème d'affichage!Problème de libération (free())
Vba: Excel >Word , Probleme de decimalesProbleme bioinfo melant l'informatique
Php et Join SQLProblème Validation XML - Ordre Aléatoire
Erreur SQL[SQL][Resolu] requete imbriqué
Problème avec la fonction setrlimit 
Plus de sujets relatifs à : [RESOLU] problème requete SQL 2008


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR