【问题标题】:Display rows after having (oracle)拥有后显示行(oracle)
【发布时间】:2018-08-07 03:44:45
【问题描述】:

我有以下选择(它会更联合):

select column_name,'my_table', count(*)
from my_table
where col10 = 'TEST' 
group by column_name
having count(*) > 1

union all

select column_name,'my_table2', count(*)
from my_table2
where col10 = 'TEST' 
group by column_name
having count(*) > 1

union all...;

运行语句后,我从 my_table2 获得 0 行

然后有可能显示如下内容??

【问题讨论】:

  • 使用not exists
  • 我不确定这个查询能否返回这样的结果。也许您在将原始查询转换为您键入的版本时确实忽略了某些内容......我的另一个猜测是,这会扰乱执行计划

标签: sql oracle select oracle12c having


【解决方案1】:

为每个表添加另一个UNION ALL

union all

select '-', 'my_table2', 0
from dual
where not exists
(
  select 1
  from my_table2
  where col10 = 'TEST' 
  group by column_name
  having count(*) > 1
)

【讨论】:

  • 谢谢,它正在工作....首先选择创建了一些临时(双)空间?
  • @4est dual 是 oracle 中的辅助表,其中一行。它用于您的这种情况。
【解决方案2】:

大概是这样的:

select nvl(sq.column_name, '-') as column_name, tn.table_name,
       nvl(sq."count > 1", 0)   as "count > 1"
from   ( 
         select "my_table"  as table_name from dual union all
         select "my_table2"               from dual -- [ ... union all ... etc]
       ) tn
     left outer join
       (
         -- ENTER YOUR CURRENT QUERY HERE, AS A SUBQUERY
       ) sq
       on tn.table_name = sq.table_name
;

【讨论】:

  • 对我来说这太复杂了,我更喜欢使用@Radim 解决方案,但还是谢谢你
猜你喜欢
  • 1970-01-01
  • 2015-07-07
  • 1970-01-01
  • 1970-01-01
  • 2016-11-25
  • 1970-01-01
  • 2012-02-20
  • 2019-04-10
  • 1970-01-01
相关资源
最近更新 更多