Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 用于多列*和*值的IN子句_Sql_Oracle - Fatal编程技术网

Sql 用于多列*和*值的IN子句

Sql 用于多列*和*值的IN子句,sql,oracle,Sql,Oracle,我想在使用“IN”子句时节省时间 在多个列中具有相同值的文件中,我通常会执行以下操作: SELECT * FROM TABLE_1 WHERE COLUMN_1 IN (VALUE_1, VALUE_2, VALUE_3, ...) AND COLUMN_2 IN (VALUE_1, VALUE_2, VALUE_3, ...) AND COLUMN_3 IN (VALUE_1, VALUE_2, VALUE_3, ...); 是否有一个IN-like子句只需一个等价项就可以达到相同的效果 例

我想在使用“IN”子句时节省时间

在多个列中具有相同值的文件中,我通常会执行以下操作:

SELECT * FROM TABLE_1
WHERE COLUMN_1 IN (VALUE_1, VALUE_2, VALUE_3, ...)
AND COLUMN_2 IN (VALUE_1, VALUE_2, VALUE_3, ...)
AND COLUMN_3 IN (VALUE_1, VALUE_2, VALUE_3, ...);
是否有一个IN-like子句只需一个等价项就可以达到相同的效果

例如


可以使用以下方法避免重复这些值:

WITH DATAA ( INPUTS ) AS (
    SELECT
        'VALUE_1, VALUE_2, VALUE_3, ...'
    FROM
        DUAL
)
SELECT
    *
FROM
    TABLE_1 T1
    JOIN (
        SELECT
            REGEXP_SUBSTR(DATAA.INPUTS, '[^,]+', 1, LEVEL) ALL_VALUES
        FROM
            DATAA
        CONNECT BY
            REGEXP_SUBSTR(DATAA.INPUTS, '[^,]+', 1, LEVEL) IS NOT NULL
    ) T2 ON T1.COLUMN_1 IN (T2.ALL_VALUES)
            AND T1.COLUMN_2 IN (T2.ALL_VALUES)
            AND T1.COLUMN_3 IN (T2.ALL_VALUES);

干杯

有类似的语法,但它不能满足您的需要(它查看三元组,而不是单独查看每列)。您需要为每列检查多少个值?我建议添加一个表,其中包含要与之进行比较和联接的数据。这种方法的一个巨大优势是,如果要比较的数据发生了更改,则无需更改查询。
WITH DATAA ( INPUTS ) AS (
    SELECT
        'VALUE_1, VALUE_2, VALUE_3, ...'
    FROM
        DUAL
)
SELECT
    *
FROM
    TABLE_1 T1
    JOIN (
        SELECT
            REGEXP_SUBSTR(DATAA.INPUTS, '[^,]+', 1, LEVEL) ALL_VALUES
        FROM
            DATAA
        CONNECT BY
            REGEXP_SUBSTR(DATAA.INPUTS, '[^,]+', 1, LEVEL) IS NOT NULL
    ) T2 ON T1.COLUMN_1 IN (T2.ALL_VALUES)
            AND T1.COLUMN_2 IN (T2.ALL_VALUES)
            AND T1.COLUMN_3 IN (T2.ALL_VALUES);