首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >联合Oracle SQL中的所有困难

联合Oracle SQL中的所有困难
EN

Stack Overflow用户
提问于 2020-11-19 06:35:24
回答 2查看 35关注 0票数 0

当尝试在Oracle SQL中执行UNION All查询时,我遇到了右括号的问题。

代码语言:javascript
复制
((SELECT DISTINCT call.call_id,
                  call_key_msg.key_msg,
                  Substr(call_key_msg.clm_id, 0, Length(call_key_msg.clm_id) - 4
                  )
                    AS asset,
                  call_clickstream.track_elmnt_desc
                    AS TRACKELEMENT
  FROM   outbound.call,
         outbound.call_key_msg,
         outbound.call_clickstream
  WHERE  call.call_id = call_key_msg.call_id
         AND call_clickstream.call(+) = call.call_id
         AND call.call_id IN ( '1', '2',
                               '3', '4' )
  MINUS
  SELECT DISTINCT call.call_id,
                  call_key_msg.key_msg,
                  Substr(call_key_msg.clm_id, 0, Length(call_key_msg.clm_id) - 4
                  )
                  AS asset,
                  call_clickstream.track_elmnt_desc
                  AS TRACKELEMENT
  FROM   outbound.call,
         outbound.call_key_msg,
         outbound.call_clickstream
  WHERE  call.call_id = call_key_msg.call_id
         AND call_clickstream.call = call.call_id
         AND call_key_msg.key_msg = call_clickstream.key_msg
         AND call.call_id IN ( '1', '2',
                               '3',
                                                   '4' )
  ORDER  BY 3)
 UNION ALL
 (SELECT DISTINCT call.call_id,
                  call_key_msg.key_msg,
                  Substr(call_key_msg.clm_id, 0, Length(call_key_msg.clm_id) - 4
                  )
                  AS asset,
                  call_clickstream.track_elmnt_desc
                  AS TRACKELEMENT
  --case when call_clickstream.CLM_ID = 'CLM ID' THEN call_clickstream.PRSNTN_ID 
  --ELSE SUBSTR(call_key_msg.CLM_ID, 0, LENGTH(call_key_msg.CLM_ID) - 4) 
  --END AS asset
  FROM   outbound.call,
         outbound.call_key_msg,
         outbound.call_clickstream
  WHERE  call.call_id = call_key_msg.call_id
         AND call_clickstream.call = call.call_id
         AND call_key_msg.key_msg = call_clickstream.key_msg
         AND call.call_id IN ( '1', '2',
                               '3',
                                                   '4' )
  ORDER  BY 3)); 

不知道这里有什么问题,但我一直收到错误'ORA-00907:缺少右括号‘。我检查了我的单行本,它们似乎排成一排。有什么想法吗?忽略where call.call_id中奇怪的空格--我刚刚使用了一个SQL格式化程序,这让它看起来有点时髦。

EN

回答 2

Stack Overflow用户

发布于 2020-11-19 06:49:08

请试一下这个。我删除了第一个SELECT语句之前的第二个括号和最后一个括号。

代码语言:javascript
复制
 (SELECT DISTINCT call.call_id,
                  call_key_msg.key_msg,
                  Substr(call_key_msg.clm_id, 0, Length(call_key_msg.clm_id) - 4
                  )
                    AS asset,
                  call_clickstream.track_elmnt_desc
                    AS TRACKELEMENT
  FROM   outbound.call,
         outbound.call_key_msg,
         outbound.call_clickstream
  WHERE  call.call_id = call_key_msg.call_id
         AND call_clickstream.call(+) = call.call_id
         AND call.call_id IN ( '1', '2',
                               '3', '4' )
  MINUS
  SELECT DISTINCT call.call_id,
                  call_key_msg.key_msg,
                  Substr(call_key_msg.clm_id, 0, Length(call_key_msg.clm_id) - 4
                  )
                  AS asset,
                  call_clickstream.track_elmnt_desc
                  AS TRACKELEMENT
  FROM   outbound.call,
         outbound.call_key_msg,
         outbound.call_clickstream
  WHERE  call.call_id = call_key_msg.call_id
         AND call_clickstream.call = call.call_id
         AND call_key_msg.key_msg = call_clickstream.key_msg
         AND call.call_id IN ( '1', '2',
                               '3',
                                                   '4' )
  ORDER  BY 3)
 UNION ALL
 (SELECT DISTINCT call.call_id,
                  call_key_msg.key_msg,
                  Substr(call_key_msg.clm_id, 0, Length(call_key_msg.clm_id) - 4
                  )
                  AS asset,
                  call_clickstream.track_elmnt_desc
                  AS TRACKELEMENT
  --case when call_clickstream.CLM_ID = 'CLM ID' THEN call_clickstream.PRSNTN_ID 
  --ELSE SUBSTR(call_key_msg.CLM_ID, 0, LENGTH(call_key_msg.CLM_ID) - 4) 
  --END AS asset
  FROM   outbound.call,
         outbound.call_key_msg,
         outbound.call_clickstream
  WHERE  call.call_id = call_key_msg.call_id
         AND call_clickstream.call = call.call_id
         AND call_key_msg.key_msg = call_clickstream.key_msg
         AND call.call_id IN ( '1', '2',
                               '3',
                                                   '4' )
  ORDER  BY 3); 
票数 0
EN

Stack Overflow用户

发布于 2020-11-19 09:32:17

您的问题是将每个union all分支放在括号内,大概是为了解决在union all分支中不能使用order by的问题。

您可以在括号查询之前将select * from添加到,以使其正常工作。请参阅此快速DBfiddle,它演示了您的错误和语法修复。

对于您的查询,它将如下所示:

代码语言:javascript
复制
select * from (SELECT DISTINCT call.call_id,
                  call_key_msg.key_msg,
                  Substr(call_key_msg.clm_id, 0, Length(call_key_msg.clm_id) - 4
                  )
                    AS asset,
                  call_clickstream.track_elmnt_desc
                    AS TRACKELEMENT
  FROM   outbound.call,
         outbound.call_key_msg,
         outbound.call_clickstream
  WHERE  call.call_id = call_key_msg.call_id
         AND call_clickstream.call(+) = call.call_id
         AND call.call_id IN ( '1', '2',
                               '3', '4' )
  MINUS
  SELECT DISTINCT call.call_id,
                  call_key_msg.key_msg,
                  Substr(call_key_msg.clm_id, 0, Length(call_key_msg.clm_id) - 4
                  )
                  AS asset,
                  call_clickstream.track_elmnt_desc
                  AS TRACKELEMENT
  FROM   outbound.call,
         outbound.call_key_msg,
         outbound.call_clickstream
  WHERE  call.call_id = call_key_msg.call_id
         AND call_clickstream.call = call.call_id
         AND call_key_msg.key_msg = call_clickstream.key_msg
         AND call.call_id IN ( '1', '2',
                               '3',
                                                   '4' )
  ORDER  BY 3)
 UNION ALL
select * from 
 (SELECT DISTINCT call.call_id,
                  call_key_msg.key_msg,
                  Substr(call_key_msg.clm_id, 0, Length(call_key_msg.clm_id) - 4
                  )
                  AS asset,
                  call_clickstream.track_elmnt_desc
                  AS TRACKELEMENT
  --case when call_clickstream.CLM_ID = 'CLM ID' THEN call_clickstream.PRSNTN_ID 
  --ELSE SUBSTR(call_key_msg.CLM_ID, 0, LENGTH(call_key_msg.CLM_ID) - 4) 
  --END AS asset
  FROM   outbound.call,
         outbound.call_key_msg,
         outbound.call_clickstream
  WHERE  call.call_id = call_key_msg.call_id
         AND call_clickstream.call = call.call_id
         AND call_key_msg.key_msg = call_clickstream.key_msg
         AND call.call_id IN ( '1', '2',
                               '3',
                                                   '4' )
  ORDER  BY 3); 

我去掉了最外面的括号,因为它们并不能真正解决一个目的,但它们也不会造成什么伤害。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64902505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档