Oracle SQL - Select 来自给定列表的不同值
Oracle SQL - Select distinct values from a given list
我进行了广泛的搜索,试图找到一种方法来 select 从给定列表中获取 table 中不存在的不同值,但似乎没有一个简单的方法这样做的方式。
我想知道这是否有可能以某种方式完成,或者是否是将值放入与那里不同的 table 和 select 中的最简单解决方案?
这是我要做的事情的要点:
Select distinct column_name from dual
where column_name in ('one','two','two','elephant');
带有 in
的构造将不起作用,除非您有一个查询 returns 您指定的所有值,也许更多,所以如果您有一组字母,您可以在 return 所有字母的查询中输入它。那会给你这样的东西:
select
*
from (
select chr(96 + level) as letter
from dual
connect by level <= 26)
where
letter in ('a', 'a', 'b');
当然,这适用于固定的有限集合,例如整个字母表,甚至是从 1 到 1000 的数字,但这不是将任何集合转换为不同列表的方法。
备选方案:双重联接
您可以 select 使用假 table dual
的单个值。你甚至可以把这样的 select 并集起来,虽然看起来有点麻烦:
select 'a' as MyValue from dual
union select 'a' from dual
union select 'b' from dual
如果您使用 union
而不是 union all
,查询将隐含地 return 仅不同的值。
备选方案:拆分字符串
如果您有字符串中的值,则可以拆分该字符串和 return 项目。有多种方法可以做到这一点,但不是开箱即用的。您可以查看问题 Splitting string into multiple rows,答案显示了各种解决方案。
尝试这样的事情:
select distinct trim(regexp_substr('a,b,b,c','[^,]+', 1, level) ) value
from dual
connect by regexp_substr('a,b,b,c', '[^,]+', 1, level) is not null
“双重联接”的替代方法是内置的 varchar2 数组。
这是例子
select distinct column_value
from table(
sys.odcivarchar2list(
'one','two','two','elephant'
)
)
我进行了广泛的搜索,试图找到一种方法来 select 从给定列表中获取 table 中不存在的不同值,但似乎没有一个简单的方法这样做的方式。
我想知道这是否有可能以某种方式完成,或者是否是将值放入与那里不同的 table 和 select 中的最简单解决方案?
这是我要做的事情的要点:
Select distinct column_name from dual
where column_name in ('one','two','two','elephant');
带有 in
的构造将不起作用,除非您有一个查询 returns 您指定的所有值,也许更多,所以如果您有一组字母,您可以在 return 所有字母的查询中输入它。那会给你这样的东西:
select
*
from (
select chr(96 + level) as letter
from dual
connect by level <= 26)
where
letter in ('a', 'a', 'b');
当然,这适用于固定的有限集合,例如整个字母表,甚至是从 1 到 1000 的数字,但这不是将任何集合转换为不同列表的方法。
备选方案:双重联接
您可以 select 使用假 table dual
的单个值。你甚至可以把这样的 select 并集起来,虽然看起来有点麻烦:
select 'a' as MyValue from dual
union select 'a' from dual
union select 'b' from dual
如果您使用 union
而不是 union all
,查询将隐含地 return 仅不同的值。
备选方案:拆分字符串
如果您有字符串中的值,则可以拆分该字符串和 return 项目。有多种方法可以做到这一点,但不是开箱即用的。您可以查看问题 Splitting string into multiple rows,答案显示了各种解决方案。
尝试这样的事情:
select distinct trim(regexp_substr('a,b,b,c','[^,]+', 1, level) ) value
from dual
connect by regexp_substr('a,b,b,c', '[^,]+', 1, level) is not null
“双重联接”的替代方法是内置的 varchar2 数组。 这是例子
select distinct column_value
from table(
sys.odcivarchar2list(
'one','two','two','elephant'
)
)