【问题标题】:Joins and condition连接和条件
【发布时间】:2011-04-11 09:32:45
【问题描述】:

我需要获取已删除sw='0' 和 eventdtm=sysdate-12 的活动名称。但是为了获得活动的全名,我认为它正在进行自我加入。但我不确定如何在这些查询中包含这些条件。谁能帮忙

SELECT  
  (DECODE(levelLess3.activitynm, NULL, '', levelLess3.activitynm || '/') ) || 
 (DECODE(levelLess2.activitynm, NULL, '', levelLess2.activitynm || '/') ) || 
 (DECODE(levelLess1.activitynm, NULL, '', levelLess1.activitynm || '/') ) || 
   wa.activitynm as ACTIVITYFULLNM
  FROM wfaactivity wa
    LEFT OUTER JOIN WFAACTIVITY levelless1 ON (wa.parentid = levelless1.wfaactivityid
   AND levelless1.wfaactivityid != wa.wfaactivityid)
 LEFT OUTER JOIN WFAACTIVITY levelless2 ON (levelless1.parentid = levelless2.wfaactivityid
   AND levelless2.wfaactivityid != levelless1.wfaactivityid)
 LEFT OUTER JOIN WFAACTIVITY levelless3 ON (levelless2.parentid = levelless3.wfaactivityid
   AND levelless3.wfaactivityid != levelless2.wfaactivityid)

我想包含类似的条件

where wa.wfaactivityid=wspan.wfaactivityid
and wspan.deletedsw='0'
and to_char(wspan.eventdtm, 'yyyymmdd') >= to_char(sysdate-12,'yyyymmdd')

wspan 是另一个表,我们从中获取 deletedsw 和 eventdtm

是的,我是这样给的

SELECT  
  (DECODE(levelLess3.activitynm, NULL, '', levelLess3.activitynm || '/') ) || 
 (DECODE(levelLess2.activitynm, NULL, '', levelLess2.activitynm || '/') ) || 
 (DECODE(levelLess1.activitynm, NULL, '', levelLess1.activitynm || '/') ) || 
   wa.activitynm as ACTIVITYFULLNM
  FROM wfaactivity wa,WFAREPACTYSPAN wspan
  where
  wa.wfaactivityid=wspan.wfaactivityid
and wspan.deletedsw='0'
and to_char(wspan.eventdtm, 'yyyymmdd') >= to_char(sysdate-12,'yyyymmdd')
and
    LEFT OUTER JOIN WFAACTIVITY levelless1 ON (wa.parentid = levelless1.wfaactivityid
   AND levelless1.wfaactivityid != wa.wfaactivityid)
 LEFT OUTER JOIN WFAACTIVITY levelless2 ON (levelless1.parentid = levelless2.wfaactivityid
   AND levelless2.wfaactivityid != levelless1.wfaactivityid)
 LEFT OUTER JOIN WFAACTIVITY levelless3 ON (levelless2.parentid = levelless3.wfaactivityid
   AND levelless3.wfaactivityid != levelless2.wfaactivityid)

但我收到错误 ORA-00920 无效的关系运算符

【问题讨论】:

  • 那么当您添加WHERE-clause 时问题出在哪里?有什么错误吗?您也只需加入 wspan。

标签: sql oracle plsql


【解决方案1】:

您的选择失败,因为您将连接条件放入 where 子句中。试试这个:

Select (DECODE(levelLess3.activitynm, Null, '', levelLess3.activitynm || '/') ) || 
       (DECODE(levelLess2.activitynm, Null, '', levelLess2.activitynm || '/') ) || 
       (DECODE(levelLess1.activitynm, Null, '', levelLess1.activitynm || '/') ) || 
       wa.activitynm As ACTIVITYFULLNM
  From wfaactivity wa
  Join WFAREPACTYSPAN wspan On wa.wfaactivityid=wspan.wfaactivityid
  Left Outer Join WFAACTIVITY levelless1 On (wa.parentid = levelless1.wfaactivityid
                                             And levelless1.wfaactivityid != wa.wfaactivityid)
  Left Outer Join WFAACTIVITY levelless2 On (levelless1.parentid = levelless2.wfaactivityid
   And levelless2.wfaactivityid != levelless1.wfaactivityid)
  Left Outer Join WFAACTIVITY levelless3 On (levelless2.parentid = levelless3.wfaactivityid
   And levelless3.wfaactivityid != levelless2.wfaactivityid)
 Where wspan.deletedsw='0'
   And TO_CHAR(wspan.eventdtm, 'yyyymmdd') >= TO_CHAR(SYSDATE-12,'yyyymmdd')

编辑

您可以按照您需要的方式加入任何您想要的表,但您必须确定加入它们的方式。从您的问题和评论看来(对不起,如果不是这种情况)您对 SQL 连接不是很熟悉。

如果是这样,我建议您阅读此excellent explanation on SQL joins。根据您加入表格的方式,您可能无法获得所需的数据。

HTH

【讨论】:

  • 嗨 Guillem 感谢您的回复。我有一个疑问,如果我需要再加入一张桌子说 X 我可以加入它吗 From wfaactivity wa Join WFAREPACTYSPAN wspan On wa.wfaactivityid=wspan.wfaactivityid JOIN X x on x.y=wspan.spanid
  • 您好 Guillem 非常感谢您的回复。是的,你是对的,我在 PLSQL 连接方面没有多少经验。感谢您的文章
【解决方案2】:

看起来您正在尝试构建层次结构 - 为什么不改用层次结构查询?

select reverse (sys_connect_by_path (reverse (wf.activitynm), '/') as activityfullnm
  from wfaactivity wf
       inner join wfarepactyspan wspan
          on wa.wfaactivityid = wspan.wfaactivityid
 start with (     wspan.deletedsw = 0 and 
              and wspan.eventdtm >= sysdate - 12)
 connect by nocycle prior wf.wfactivityid = wf.parentid 
 where level <= 4

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-29
    • 2016-03-15
    • 2020-11-07
    相关资源
    最近更新 更多