DB2 With 子句条件选择

问题描述 投票:0回答:1

在我的java代码中,我编写了一个本机查询。下面的列表对象应该是可参数化的,如

list = ('a','b')
但我的意图是,只有当给定列表与常量 'a'、'b' ... 匹配时,才应执行其中一个子查询。 可以吗?

WITH A AS (SELECT ID FROM A WHERE 'a' in list), (SELECT ID FROM B WHERE 'b' in list), (SELECT ID FROM C WHERE 'c' in list), (SELECT ID FROM D WHERE 'd' in list)

db2 db2-luw
1个回答
0
投票

如您所知,@The Impaler 说:SQL 是一种声明式语言,而不是命令式语言。它只能以逻辑方式进行选择。您可以通过将列表创建为表并使用转置矩阵(DB2 中的 LATERAL 函数)来实现您的结果。

db<>小提琴

WITH list (list_name) AS (VALUES 'A', 'B', 'C', 'D')
    , A (ID1, values1) AS (VALUES (1, 'A'))
    , B (ID2, values2) AS (VALUES (2, 'B'))
    , C (ID3, values3) AS (VALUES (3, 'C'))
    , D (ID4, values4) AS (VALUES (4, 'D'))



SELECT transposedID AS ID, transposedValues AS values FROM ( 
SELECT table_1.* FROM ( 
    
SELECT * FROM A,B,C,D 
INNER JOIN list l1 ON 'A' in l1.list_name
INNER JOIN list l2 ON 'B' in l2.list_name
INNER JOIN list l3 ON 'B' in l3.list_name
INNER JOIN list l4 ON 'B' in l4.list_name
) AS table_1
) CROSS JOIN LATERAL (
    VALUES 
        (ID1, values1),
        (ID2, values2),
        (ID3, values3),
        (ID4, values4)
    ) AS Transposed(transposedID, transposedValues);


结果:

#|ID|VALUES|
-+--+------+
1| 1|A     |
2| 2|B     |
3| 3|C     |
4| 4|D     |


最新问题
© www.soinside.com 2019 - 2025. All rights reserved.