Weitere Beispiele zu Lateral (andere Dialekte), funktioniert auch in DB2 for i:
https://blog.jooq.org/lateral-is-you...iables-in-sql/

Beispiel aus dem Link:

Code:
SELECT actor_id, name, name_length, COUNT(*)
FROM
  actor JOIN film_actor AS fa USING (actor_id),
  LATERAL (SELECT first_name || ' ' || last_name AS name) AS t1,
  LATERAL (SELECT length(name) AS name_length) AS t2
GROUP BY actor_id, name, name_length
ORDER BY COUNT(*) DESC
LIMIT 5;
In DB2 for i

Code:
SELECT actor_id, name, name_length, COUNT(*)
FROM
  actor JOIN film_actor AS fa USING (actor_id),
  LATERAL (values( first_name || ' ' || last_name)) AS t1 (name),
  LATERAL (values( length(name))) AS t2 (name_length)
GROUP BY actor_id, name, name_length
ORDER BY COUNT(*) DESC
LIMIT 5;
Interessant wirds dann bei Embedded SQL und Parametern:

Code:
select a.*
        ,a.Preis * Faktor
  from Artikel a
  cross join lateral(
      values( :P1, :P2)
    ) p (Artikelnummer, Faktor)
where a.Artikelnummer = p.Artikelnummer
Vor allem, wenn man Parameter mehrfach in unterschiedlichen Teilen des SQL's benötigt, braucht man Parameter nur noch 1x per Lateral anhängen, da sie dann überall verwendet werden können. Somit ist die Wartung komplexer SQL's einfacher, wobei die Komplexität sogar noch sinkt.

Lateral wird im Gegensatz zum normalen Join für den Einzelzugriff optimiert und entspricht eher dem Programmiergedanken mit den Dateien.

Übrigens wurde Lateral mit SQL99 bereits eingeführt:
https://elephantdolphin.blogspot.com...ved-table.html

Und für die IBM kam es etwas später:
https://www.rpgpgm.com/2021/10/using...al-in-sql.html
Hier kann man auch schön sehen, dass ein Cross-Join durchaus Sinn macht.

Probierts einfach aus, es ist wirklich genial!