Comment LEFT JOIN dans DB2 iseries avec la première ligne?
J'ai besoin d'une requête de JOINTURE d'une TABLE avec Une première ligne d'une autre table de la base de la valeur:
SELECT * FROM TABLEA A LEFT JOIN
(SELECT * from TABLEB
WHERE FIELD1 <> '3' and FIELD2 = 'D' AND A.CODE=CODE
FETCH FIRST 1 ROW ONLY
) B
on a.FIELDA = b.FIELDA
and A.FIELDB = B.FIELDB
mais DB2 retour d'ERREUR parce que ne pouvez pas utiliser A. CODE
Comment résoudre ce problème?
- Vous faites référence à la tablea (alias dans votre table dérivée, mais vous ne l'avez pas dans la clause from. Je pense que vous avez besoin de le déplacer de votre clause de jointure.
- Pouvez-vous me donner un code?
- double possible de Sélectionnez la première ligne dans une jointure de deux tables en une seule instruction
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser le table imbriquée expression:
where exists
n'est pas identique ou équivalent à celui de la requête dans la question qu'il retourne uniquement les colonnes de la TABLEA et pas TABLEB.C'est un très optimisé déclaration.
Votre ne pas obtenir toutes les données de la tableb et vous allez pour la première ligne donc, vous avez juste besoin de la clause.
SELECT *
, nous ne savons pas ce que les colonnes de Daniele peut-être à l'aide de la TableBVous pouvez utiliser l'OLAP fonction
row_number()
pour classer les enregistrements selon somefield(s) dans un (fielda,fieldb,code) du groupe. Somefield peut-être un id de transaction, ou d'une séquence, par exemple. La clause order by y est optionnelle, mais sans elle, vous pourriez être en choisissant au hasard le dossier qui est le premier dans le groupe.