sql - WITH 子句可以在不使用 Select 语句的情况下具有硬编码值吗?
问题描述
我有一种情况,我需要加入两个不同的数据库(都是 oracle,我没有 DB 链接)才能得到我的结果。我想知道我是否可以使用 WITH 子句创建一个带有所有硬编码值的子查询,以加入其他数据库中的另一个表。我尝试了类似下面的东西
WITH TEMP AS (SELECT '8108428','8110729' FROM DUAL)
但它将值作为列给出,但我需要它们在一列下作为行,所以我可以加入其他表。有人可以帮我解决吗?我以前使用过 WITH 子句,但其中有一个查询,但这只能采用硬编码值
感谢您的回复!
解决方案
您可以创建一个集合类型:
CREATE TYPE varchar2_10_table AS TABLE OF VARCHAR2(10);
然后,如果您期望做某事,例如:
WITH TEMP ( value ) AS (
SELECT '8108428' FROM DUAL UNION ALL
SELECT '8110729' FROM DUAL
)
SELECT *
FROM your_table
WHERE id IN ( SELECT value FROM temp )
然后你可以WITH
用集合替换子句:
SELECT *
FROM your_table
WHERE id IN ( SELECT value FROM TABLE( varchar2_10_table( '8108428','8110729' ) ) )
或使用MEMBER OF
运算符:
SELECT *
FROM your_table
WHERE id MEMBER OF varchar2_10_table( '8108428','8110729' )
或者,如果您想保留该WITH
子句并将集合的值解压缩到其中,则:
WITH TEMP ( value ) AS (
SELECT COLUMN_VALUE FROM TABLE( varchar2_10_table( '8108428','8110729' ) )
)
SELECT *
FROM your_table
WHERE id IN ( SELECT value FROM temp )
或者,将集合保留在WITH
子句中:
WITH TEMP ( collection_value ) AS (
SELECT varchar2_10_table( '8108428','8110729' ) FROM DUAL
)
SELECT y.*
FROM your_table y
INNER JOIN temp t
ON ( y.id MEMBER OF t.collection_value )
推荐阅读
- angular - 直接导航到 Angular 4 中的 URL
- python - Scrapy中刮取值之间的空格
- database - 创建表时出现 ora-00907 缺少右括号错误。数据库新手,不知道怎么回事
- ios - 在 UICollectionView 中将 boundingRectWithSize 与 UITextView 一起使用
- bash - 在 bash 中添加类似的行
- arrays - 在mongodb中使用数组查询模型
- python - groupby 索引的嵌套字典
- scala - 无法从 Scala 泛型方法调用重载的 Java 方法
- r - 在 R 中创建具有多列的散点图
- python - 支持带有 aumbry 的加密和非加密配置