2017-09-13 2 views
0

J'ai la requête sql de travail suivante pour une base de données Informix.Comment quitter JOIN dans INFORMIX SQL

SELECT soi_seq,soi_cusitem,max(soi_product) as ProductCode, 
     max(soi_custprod) as CustProductCode, max(soi_desc) AS ProductDesc, 
     max(soi_comdt2) AS RequiredDate, sum(soi_itqty) as Qty, 
     sum(soi_invval) as Nett, max(soi_discper) as Discount, max(soi_per) 
     as Per, max(soi_price) as ItemPrice 
     from soitem 
     where soi_ordref= ? group by soi_seq,soi_cusitem, soi_lineref 
     order by soi_cusitem asc 

J'ai besoin de se joindre à deux autres tables, mais ne savent pas comment faire en utilisant la syntaxe Informix, essentiellement je dois ajouter à la requête ci-dessus les éléments suivants Jointures:

 Left Join cmprod on soi_product = cmp_product 
     Left Join cmass on cmp_product = cmass_product 

et aussi, ajouter ce qui suit à la clause WHERE:

 AND cmass_assem Is Null 

Je peux demander et obtenir les résultats requis à l'aide d'une ancienne connexion MS Access au Informix db, mais pas dans le code.

+0

ANSI SQL: 'select ... à partir t1 t2 jointure gauche sur t1.c = t2.d gauche rejoindre t3 t2.e = t3.f où ... groupe par ... ordre par ... '. – jarlh

+0

déjà essayé, obtenir System.Data.Odbc.OdbcException: 'ERREUR [42000] [Informix] [pilote ODBC Informix] [Informix] Une erreur de syntaxe s'est produite. – JohnL

+0

J'ai contourné mon problème, j'ai gardé la requête originale à datatable, j'ai créé la requête sperate à datatable puis j'ai fait la jointure requise via linq à datatable. il semble que notre ancienne version informix doenst supporte les jointures. – JohnL

Répondre

0

Cela devrait fonctionner

SELECT soi_seq, soi_cusitem, soi_lineref, 
     MAX(soi_product) AS ProductCode, 
     MAX(soi_custprod) AS CustProductCode, 
     MAX(soi_desc) AS ProductDesc, 
     MAX(soi_comdt2) AS RequiredDate, 
     SUM(soi_itqty) AS Qty, 
     SUM(soi_invval) AS Nett, 
     MAX(soi_discper) AS Discount, 
     MAX(soi_per) AS Per, 
     MAX(soi_price) AS ItemPrice 
FROM soitem 
LEFT JOIN cmprod ON soi_product = cmp_product 
LEFT JOIN cmass ON cmp_product = cmass_product 
WHERE soi_ordref = ? 
     AND cmass_assem IS NULL 
GROUP BY 1,2,3 
ORDER BY 2