Oracle 使用表Cast
你能在电话线上用点什么吗Oracle 使用表Cast,oracle,plsql,oracle10g,Oracle,Plsql,Oracle10g,你能在电话线上用点什么吗 Select * from table(cast(select * from tab1 inner join tab2)) inner join tab3 考虑到tablecast中的内容比简单的select要复杂得多,它涉及一个块,比如test as select*。。。等等 我需要一个简单的方法来做到这一点,最好不需要一个临时表 多谢各位 数据库:Oracle 10g 乐: 我有点像 Select a.dummy1, a.dummy2, wm_concat(t2.
Select * from table(cast(select * from tab1 inner join tab2)) inner join tab3
考虑到tablecast中的内容比简单的select要复杂得多,它涉及一个块,比如test as select*。。。等等
我需要一个简单的方法来做到这一点,最好不需要一个临时表
多谢各位
数据库:Oracle 10g
乐:
我有点像
Select a.dummy1, a.dummy2, wm_concat(t2.dummy3)
from table1 a,
(with str as
(Select '1,2,3,4' from dual)
Select a.dummy1, t.dummy3
from table1 a
inner join
(Select regexp_substr (str, '[^,]+', 1, rownum) split
from str
connect by level <= length (regexp_replace (str, '[^,]+')) + 1) t
on instr(a.dummy2, t.split) > 0) t2
where a.dummy1='xyz'
group by a.dummy1, a.dummy2
主要思想是t2.dummy3列包含CSV。这就是为什么我从dual中选择了'1,2,3,4'。
我需要找到至少包含str中一个值的所有行
使用任何类型的循环都是不可能的,因为我需要进一步将其集成到一个更大的查询中,用于SSRS中的报告,而这所需的表相当大,超过1mil行,在这里似乎完全不相关。您可以使用CAST更改表达式的感知数据类型。在这里,您将向它传递一个结果集,而不是表达式,并且您没有说明要转换到哪个数据类型
您应该能够简单地删除表和强制调用,并执行以下操作:
with str as
(Select '1,2,3,4' from dual)
Select a.dummy1, a.dummy2, wm_concat(t2.dummy3)
from table1 a,
(
Select a.dummy1, t.dummy3
from table1 a
inner join
(Select regexp_substr (str, '[^,]+', 1, rownum) split
from str
connect by level <= length (regexp_replace (str, '[^,]+')) + 1) t
on instr(a.dummy2, t.split) > 0) t2
where a.dummy1='xyz'
group by a.dummy1, a.dummy2
选择*从选择*从选项卡1内部连接选项卡2在。。。内部连接选项卡3位于
e、 g
子查询分解在这里也应该可以很好地工作
WITH x AS (SELECT * FROM DUAL)
SELECT * FROM
(SELECT d1.dummy FROM x d1 INNER JOIN x d2 ON d1.dummy=d2.dummy) d12
INNER JOIN dual d3 ON d12.dummy = d3.dummy;
如果你很难让这种结构发挥作用,试着在你的问题中添加更多的细节,特别是你尝试了什么以及你遇到了什么错误。CAST在这里似乎完全不相关。您可以使用CAST更改表达式的感知数据类型。在这里,您将向它传递一个结果集,而不是表达式,并且您没有说明要转换到哪个数据类型
您应该能够简单地删除表和强制调用,并执行以下操作:
with str as
(Select '1,2,3,4' from dual)
Select a.dummy1, a.dummy2, wm_concat(t2.dummy3)
from table1 a,
(
Select a.dummy1, t.dummy3
from table1 a
inner join
(Select regexp_substr (str, '[^,]+', 1, rownum) split
from str
connect by level <= length (regexp_replace (str, '[^,]+')) + 1) t
on instr(a.dummy2, t.split) > 0) t2
where a.dummy1='xyz'
group by a.dummy1, a.dummy2
选择*从选择*从选项卡1内部连接选项卡2在。。。内部连接选项卡3位于
e、 g
子查询分解在这里也应该可以很好地工作
WITH x AS (SELECT * FROM DUAL)
SELECT * FROM
(SELECT d1.dummy FROM x d1 INNER JOIN x d2 ON d1.dummy=d2.dummy) d12
INNER JOIN dual d3 ON d12.dummy = d3.dummy;
如果你很难让这种结构发挥作用,试着在你的问题中添加更多的细节,特别是你尝试了什么以及你遇到了什么错误。是的。。。我找到了答案。。。我只是太过SQL n00b而看不见它,因为它就在我面前 我只是把with语句放在查询之外,它就工作了 非常感谢你的帮助,是你的回答让我明白了我的错误:D 比如:
with str as
(Select '1,2,3,4' from dual)
Select a.dummy1, a.dummy2, wm_concat(t2.dummy3)
from table1 a,
(
Select a.dummy1, t.dummy3
from table1 a
inner join
(Select regexp_substr (str, '[^,]+', 1, rownum) split
from str
connect by level <= length (regexp_replace (str, '[^,]+')) + 1) t
on instr(a.dummy2, t.split) > 0) t2
where a.dummy1='xyz'
group by a.dummy1, a.dummy2
嗯。。。我找到了答案。。。我只是太过SQL n00b而看不见它,因为它就在我面前 我只是把with语句放在查询之外,它就工作了 非常感谢你的帮助,是你的回答让我明白了我的错误:D 比如:
with str as
(Select '1,2,3,4' from dual)
Select a.dummy1, a.dummy2, wm_concat(t2.dummy3)
from table1 a,
(
Select a.dummy1, t.dummy3
from table1 a
inner join
(Select regexp_substr (str, '[^,]+', 1, rownum) split
from str
connect by level <= length (regexp_replace (str, '[^,]+')) + 1) t
on instr(a.dummy2, t.split) > 0) t2
where a.dummy1='xyz'
group by a.dummy1, a.dummy2