将 id 列表传递给多个查询

Passing in a list of ids to several queries

我有几个查询在 where 子句中使用相同的 ID。目前我有

查询 1

select * from X ....... where id in (1,2,3);

查询 2

select * from Y ....... where id in (1,2,3);

等等等等

我想要的是

查询 1

DEFINE VAR LIST;
VAR = (1,2,3)
select * from X ....... where id in (MY_VAR);
select * from Y ....... where id in (MY_VAR);

这意味着如果我更改 ID,我将不必在两个地方进行更新。

我试过上面的方法,但它出错了。我的语法怎么了?

提前致谢

在SQLPlus,SQL开发者等:

SQL> define list = 1,2,3
SQL> select * from x where id in (&list.);

        ID
----------
         1
         2
         3

您可以尝试以下方法:

WITH list_values AS (
     SELECT TO_NUMBER(TRIM(REGEXP_SUBSTR('1,2,3', '[^,]+', 1, LEVEL))) AS id
       FROM dual
    CONNECT BY INSTR('1,2,3', ',', 1, LEVEL - 1) > 0
) SELECT x.* FROM x, list_values
   WHERE x.id = list_values.id;

采用上面的子查询并使用它创建一个临时 table 可能是值得的,然后简单地使用那个 table 继续前进。除其他事项外,它还允许您在列表中拥有超过 1000 个 ID。