Accéder au contenu principal

Utiliser la clause UNION ALL

La clause UNION ALL vous permet de construire un tableau se basant sur les résultats de plusieurs blocs de requêtes ou de sous-requêtes.

Dans Talend Data Mapper avec la mise à jour mensuelle 8.0.1-R2024-05 ou une plus récente, vous pouvez également utiliser UNION ALL ENTRY pour créer un tableau d'enregistrements avec des paires clé/valeur provenant de plusieurs sous-requêtes.

Une requête avec une clause UNION ALL pour combiner les résultats de sous-requêtes dans un tableau doit suivre le format suivant :
SELECT [
  <sub-query>
   UNION ALL
  <sub-query>
]
Cette syntaxe est utilisée dans l'exemple suivant : Fusionne deux tableaux en se basant sur des conditions.
Une requête avec une clause UNION ALL ENTRY pour combiner les résultats de sous-requêtes dans un tableau d'enregistrements doit suivre le format suivant :
SELECT [
  { key = '<name_of_key>', value = <value_expression> }
  UNION ALL ENTRY
  { key = '<name_of_key>', value = <value_expression> }
]
Par exemple :
FROM customer
SELECT [
  { key = 'id', value = custid }
  UNION ALL ENTRY
  { key = 'name', value = name }
  UNION ALL ENTRY
  { key = 'address', value = concatWith(', ', address.street, address.city) }
]
Une requête avec une clause UNION ALL pour combiner les résultats de blocs de requêtes dans un tableau doit suivre le format suivant :
<query_block>
UNION ALL
<query_block>
Vous pouvez utiliser des conditions dans une clause UNION ALL. Par exemple :
FROM order
LET $items_size = size(items)
WHERE $items_size > 2
SELECT [
  IF ($items_size > 2) ( FROM items INDEX $i SELECT ENTRY { key = concat('itemno_', $i + 1), value = itemno } )
  UNION ALL ENTRY
  IF ($items_size > 2) ( FROM items INDEX $j SELECT ENTRY { key = concat('qty_', $j + 1), value = qty } )
  UNION ALL ENTRY
  IF ($items_size > 2) ( FROM items INDEX $k SELECT ENTRY { key = concat('price_', $k + 1), value = price } )
]

Cette page vous a-t-elle aidé ?

Si vous rencontrez des problèmes sur cette page ou dans son contenu – une faute de frappe, une étape manquante ou une erreur technique – dites-nous comment nous améliorer !