将 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。
我有几个查询在 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。