sql - 如何在 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)
解决方案
我想你需要这样的正确查询:
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
推荐阅读
- angular - 在angular+ spring boot中上传50MB文件的最佳实践是什么
- php - 将 Composer 客户端库添加到 PHP 容器
- reactjs - TypeScript 没有选择重载
- excel - Excel Solver - 限制变量数
- blazor-webassembly - 带有 Enter 按钮的 Blazor InputText 触发函数
- python-3.x - 如何在类中使用 Python 的 websockets 和 asyncio 以及现有的事件循环
- matlab - Matlab:如何将“日期时间”数据导出到外部文件?“使用 fprintf 时出错。没有为‘单元’输入定义函数。”
- oracle - 如何在 SQL plus 中的列值之前修剪尾随空格
- amazon-web-services - 挂载S3桶系统后目录日期显示为1970
- angular - Angular 应用程序在更改时停止重新加载