java - DB2 中使用 INTERSECT 的交集

标签 java db2 db2-luw intersect

我在 DB2 中有一个查询需要交集。

SELECT  * FROM records where id = 1
intersect 
SELECT  * FROM records where id = 2

现在 ids 的大小可以动态增长,DB2 中是否有任何可以将 ids 列表作为参数的东西?就像是 在 (1,2,3,4,5) 中相交,以便可以使用单个查询考虑这些 id 上的结果集的交集?

最佳答案

您可以使用 ID LIST 创建一个表,然后创建一个过程来动态创建要执行的 SQL 语句。

类似这样的事情:

CREATE PROCEDURE
    YOUR_PROCEDURE
    (
    )
    LANGUAGE SQL
    SPECIFIC YOUR_PROCEDURE
    NOT DETERMINISTIC
    MODIFIES SQL DATA
    CALLED ON NULL INPUT
    INHERIT SPECIAL REGISTERS
    SET OPTION
        ALWBLK = *ALLREAD ,
        ALWCPYDTA = *YES ,
        COMMIT = *NONE ,
        CLOSQLCSR = *ENDMOD ,
        DECRESULT = (31, 31, 00) ,
        DFTRDBCOL = *NONE ,
        DLYPRP = *NO ,
        DYNDFTCOL = *NO ,
        DYNUSRPRF = *USER ,
        SRTSEQ = *HEX ,
        OUTPUT = *PRINT,
        DBGVIEW = *SOURCE
BEGIN
    DECLARE LAST_ELEMENT SMALLINT DEFAULT 0 ;
    DECLARE FIRST_ELEMENT SMALLINT DEFAULT 1 ;
    DECLARE STMT VARCHAR ( 5000 ) ;
    DECLARE ID_CODE_TO_USE NUMERIC (9 , 0) ;

    DECLARE ID_LIST CURSOR FOR
    SELECT
        ID_CODE
    FROM
        YOUR_TEMPORARY_TABLE ;

    DECLARE CONTINUE HANDLER FOR NOT FOUND SET LAST_ELEMENT = -1 ;

    OPEN  ID_LIST ;
    SET STMT = '' ;
    SET FIRST_ELEMENT = 1 ;

    FETCH_ID_LIST:
    LOOP
        FETCH ID_LIST
        INTO
        ID_CODE_TO_USE ;

    -------
        IF LAST_ELEMENT = -1 THEN
            LEAVE FETCH_ID_LIST ;
        END IF ;
    -------
        IF FIRST_ELEMENT= 1 THEN
            SET STMT = 'SELECT  * FROM RECORD WHERE ID = ' CONCAT  CHAR(ID_CODE_TO_USE)
            SET FIRST_ELEMENT = 0 ;
        END IF ;

    -------
        SET STMT = 'INTERSECT SELECT  * FROM RECORD WHERE ID = ' CONCAT  CHAR(ID_CODE_TO_USE)
    END LOOP FETCH_ID_LIST;

    CLOSE  ID_LIST ;
    IF STMT <> '' THEN
        EXECUTE IMMEDIATE STMT ;
    END IF ;
END ;

关于java - DB2 中使用 INTERSECT 的交集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57141311/

相关文章:

java - 在构建时反序列化

java - JPanels AS 坞站

java - 使用 Java 和 Kafka 的 Apache Spark Streaming

db2 - 如何在 db2 中自动递增?

sql - db2 "DB21018E A system error occurred. The command line processor could not continue processing."

ssl - db2 仓库 : How to connect using SSL with ibm data server driver

java - Selenium - 错误 : element not interactable

java - jdbc DB2 queryTimeout 未按预期工作

sql - 从表中删除大量行

database - 如何使用 DB2 SQL 将 DECFLOAT 更改为 INT?