Informix sous-requêtes avec la PREMIÈRE option
Quelle est la meilleure façon de transcrire le code Transact-SQL suivant pour Informix Dynamic Server (IDS) 9h40:
Objectif: j'ai besoin de les 50 premières commandes auprès de leur ordre respectif des lignes
select *
from (select top 50 * from orders) a inner join lines b
on a.idOrder = b.idOrder
Mon problème est avec celle-ci parce que Informix ne permettent pas la PREMIÈRE option dans le sous-sélection.
Une simple idée?.
Vous devez vous connecter pour publier un commentaire.
La réponse officielle serait " Veuillez mettre à niveau à partir d'ID 9.40 puisqu'il n'est plus pris en charge par IBM. C'est, ID 9.40 n'est pas une version à jour - et devrait (idéalement) de ne pas être utilisé.
Solution pour ID 11.50
À l'aide IDS 11.50, je peux écrire:
C'est plus ou moins équivalent à votre requête. Par conséquent, si vous utilisez une version actuelle de ID, vous pouvez écrire la requête en utilisant la même notation que dans les instructions Transact-SQL (à l'aide de la PREMIÈRE à la place de HAUT).
Solution pour ID 9.40
Que pouvez-vous faire votre ID de 9.40? Excusez-moi un instant...je dois courir mon ID 9.40.xC7 serveur (ce correctif pack a été publié en 2005; la version d'origine était probablement à la fin de 2003)...
Premier problème - ID 9.40 ne permettent pas de sous-requêtes dans la clause from.
Deuxième problème - ID 9.40 ne pas autoriser " n " de notation dans l'une de ces contextes:
Troisième problème - ID 9.40 ne dispose pas d'un simple numéro de rangée.
Donc, pour contourner ces éléments, nous pouvons écrire (en utilisant une table temporaire - nous allons le supprimer plus tard):
Ce produit la même réponse que la requête unique ID de 11.50. Pouvons-nous éviter de la table temporaire? Oui, mais il est plus prolixe:
En l'appliquant à l'origine des ordres de plus les lignes de commande exemple est laissé comme exercice pour le lecteur.
Sous-ensemble pertinent de schéma pour le " Tableau d'Éléments:
De sortie (sur mon exemple de base de données):
SELECT * FROM table(multiset( SELECT * FROM xxx... ))
- c'est essentiellement le même que le vrai ANSI table dérivée. Il existe certaines restrictions sur ce que vous pouvez faire dans l'intérieur de la sélection, mais surtout, il fonctionne.Si je comprends bien votre question, vous rencontrez un problème avec les "TOP". Essayez d'utiliser un HAUT-requête N.
Par exemple:
Cela vous aidera à cinquante premiers résultats (parce que j'ai order by desc dans la sous-requête)
rownum
n'est pas Informix SQL. Qui ne (?) travail pour Oracle.