我有几个查询在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,我不必在两个地方更新。
我尝试了以上但是错误。我的语法是什么?
提前致谢
答案 0 :(得分:2)
在SQL Plus,SQL Developer等中:
SQL> define list = 1,2,3
SQL> select * from x where id in (&list.);
ID
----------
1
2
3
答案 1 :(得分:0)
您可以尝试以下方法:
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;
使用上面的子查询并使用它来创建临时表可能是值得的,然后只需使用该表向前移动。除此之外,它还允许您在列表中拥有超过1000个ID。