Sql 用于多列*和*值的IN子句
我想在使用“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子句只需一个等价项就可以达到相同的效果 例
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);