Expression de Table commune dans la Sous-Requête

Je demande de l'aide dans la compréhension de ce qui tous les SGBDR d'Oracle, DB2, Sybase support d'une expression de table commune (CTE) dans une sous-requête. Je suis conscient que PostgreSQL n'a alors que MS SQL Server ne prend pas.

SELECT a.*, b.* 
 FROM (WHERE aa as (
          <<select_query>),
          SELECT * 
            FROM aa
           WHERE <<criteria>>
    ) as a
    LEFT JOIN (
        WITH bb as (
            <<select_query>
        ),
        select * from bb inner join tbl_c on <<innerjoin>> where <<criteria>>
    ) as b
    on <<join_expr>>

Je suis incapable de définir la clause à l'extérieur de la sous-requêtes - à la fois les requêtes sont générées dynamiquement w.r.t. les colonnes, les critères, la sécurité, etc.
Aussi, la requête ci-dessus peut être utilisé dans une autre requête comme une sous-requête.
En résumé, le principe est généré dynamiquement, vues, re-utilisables plus tard. Certaines requêtes peuvent avoir jusqu'à 10-12 ces vues dynamiques être fusionnés ensemble.
Le problème est que l'application est censé être à la base de données agnostique au moins tant que PG, Oracle & DB2 sont concernés et les fonctionnalités non prises en charge par l'un ne sont pas mises en œuvre à tous.

Oracle appelle "sous-requête d'affacturage", et de l'utiliser pour définir à l'intérieur d'une sous-requête qui me frappe comme un mauvais choix. Plus on est élevé, plus le champ d'application à utiliser.

OriginalL'auteur Kapil | 2011-07-25