首页 > 解决方案 > 如何在 WHERE 之后包含 JOIN?

问题描述

我需要执行一个遵循给定前缀的语句。

我们使用某个程序,它具有“搜索文件夹”。在 Search 文件夹中,我可以定义一个 SQL 查询。文件夹有一个内置的查询部分,我无法修改。

内置部分是:

Prefix Artikelfilter: SELECT * FROM CMKAT.ART WHERE 1=1 AND 

现在我想执行以下搜索查询:

select * from CMKAT.ART

join CMKAT.AEZ on art.artKEYI = aez.aezartkeyi

join pro on pro.prokeyi = aez.aezprokeyi

left outer join psz on pro.prokeyi = psz.pszprokeyi

WHERE psz.pszprokeyi is null

AND pro.proetykeyi = 1;

当然,'SELECT *...' 部分是多余的,但我怎样才能让查询工作呢?JOIN 在 WHERE 之后。

我知道开发人员通过创建视图解决了这个问题,并从视图中进行选择,而不是直接在查询中。

编辑:

例外:JdbcAccess.execute 失败(ORA-00904:“KVTBEZC”:ungültige ID)。

 SQL: 
<prefix>
SELECT /* filter art */ artkeyi, artkavkeyi, artvnrs FROM art  JOIN 
kav ON art.artkavkeyi = kav.kavkeyi  JOIN kvt ON kav.kavkvtkeyi = 
kvt.kvtkeyi  JOIN kat ON kav.kavkatkeyi = kat.katkeyi  WHERE 
(artkavkeyi IN (587, 3075, 7, 8, 592)) AND

</prefix>

 1 = 0 union all select * 
from cmkat.art  join cmkat.aez on art.artkeyi = aez.aezartkeyi  join 
pro on pro.prokeyi = aez.aezprokeyi  left join psz on pro.prokeyi = 
psz.pszprokeyi  where psz.pszprokeyi is null and pro.proetykeyi = 1 
AND katkeyi = 4 AND (katspes IN (0, 3, 1, 2))/* join-dummy */ ORDER BY 
artkeyi, kvtbezc (DATABASE_EXECUTE_FAILED)

标签: sqloraclejoin

解决方案


我想你需要这样的正确查询:

If exists (SELECT 1 FROM CMKAT.ART WHERE 1=1)
  Begin
     (
     Select  * 
     From CMKAT.ART 
          Inner join CMKAT.AEZ on art.artKEYI = aez.aezartkeyi
          Inner join pro on pro.prokeyi = aez.aezprokeyi 
          Left Outer join psz on pro.prokeyi = psz.pszprokeyi 
     WHERE psz.pszprokeyi is null AND pro.proetykeyi = 1;
     )
  END     

推荐阅读