0
votes

DB2 SQL requis alias dans l'endroit où la clause

Y a-t-il un moyen où nous pourrions interroger en utilisant des alias

Error: DB2 SQL Error: SQLCODE=-206, SQLSTATE=42703, SQLERRMC=AVC, 
DRIVER=3.63.75
SQLState:  42703
ErrorCode: -206
Error: DB2 SQL Error: SQLCODE=-514, SQLSTATE=26501, SQLERRMC=SQL_CURLH200C1, 
DRIVER=3.63.75
SQLState:  26501
ErrorCode: -514


0 commentaires

3 Réponses :


0
votes

Vous ne pouvez pas utiliser d'alias dans l'emplacement de la condition car le moteur SQL Evalez la clause de requête (à partir de, où, sélectionnez ...) dans une commande spécifique et la clause SELECT dans l'évaluation après la clause WHERE

. MOMENT DE L'ÉVALUTION D'ÉVALUTION L'ALASS DE LA COLONNE INCUS DANS LE MOTEUR DB P>

Vous devez répéter le code P>

SELECT 'X' AS AVC
FROM  sysibm.sysdummy1
WHERE X' = 'X' 


0 commentaires

0
votes

Vous ne pouvez pas. Ceci est une règle générale de SQL. En pratique, vous pouvez penser à la raison pour laquelle le où code> est analysé avant le SELECT CODE>, de sorte que les alias ne sont pas connus.

La solution générale consiste à utiliser un SubQuery ou CTE: P>

SELECT t.*
FROM (SELECT 'X' AS AVC
      FROM sysibm.sysdummy1
     ) t
WHERE AVC = 'X';


1 commentaires

Les requêtes équivalentes suivantes travaillent dans DB2. Sélectionnez T. * À partir du tableau (valeurs ('x', 'y')) T (AVC, AVC2) où avc = 'x'; ou Sélectionnez t. * de latéral (valeurs ('X', 'y')) t (avc, avc2) où avc = 'x';



0
votes

Le moteur ne connaît pas les alias de table ou de colonne jusqu'à ce qu'il soit fini de rassembler les données. Vous pouvez les utiliser dans commander par instruction dans la même requête, mais c'est tout. Vous pouvez toutefois utiliser un Expression de table commune également appelée CTE : xxx

Ceci est un peu loin de le faire, mais malheureusement c'est il.


0 commentaires