听起来好像您有某种 Java 数组或序列号集合,也许您想检查这些数字是否在 DB2 表中找到,并且您想一次完成整个列表,而不是一次不止一个。好想法。
因此,您希望有一组行,您可以使用这些行对表进行左连接,null 表示相应的序列不在表中。几个答案已经开始使用这种方法。但是他们没有返回您的行号,并且他们正在使用 SELECT UNION,这似乎是一种获得您想要的东西的迂回方式。
VALUES 子句
您的 FROM 子句可以是“嵌套表表达式”
,它可以是
带有相关子句的(全选) 。(fullselect) 反过来可以是一个 VALUES 子句。所以你可以有这样的东西:
FROM (VALUES (1, '157'), (2, '4F2'), (3, '5MISSING'), (4, '93O'), ...
) as Lst (rw, sn)
然后,您可以将其 LEFT JOIN 加入表中,并获得您要求的两列结果表:
SELECT Lst.rn, t.serial_num
FROM (VALUES (1, '157'), (2, '4F2'), (3, '5MISSING'), (4, '93O'), ...
) as Lst (rw, sn)
LEFT JOIN sometable t ON t.serial_num = Lst.sn
使用此方法,您可能需要一个循环来使用集合中的值构建动态 SQL 语句字符串。
如果它是嵌入式 SQL,我们可能能够引用包含您的序列号的主机数组变量。但是,唉,在 Java 中,我不确定如何在不使用循环的情况下直接在 SQL 中使用列表进行管理。