首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从select语句中删除子查询?

如何从select语句中删除子查询?
EN

Stack Overflow用户
提问于 2021-11-24 01:33:50
回答 1查看 72关注 0票数 0

在从原始SELECT语句中删除子查询时,我需要帮助。这有可能吗?我需要这样做来最终将这样的查询移到Denodo/VQL,它不允许SELECT语句中的子查询(但是允许CTE/WITH和子查询从/哪里)。

代码语言:javascript
复制
select case when material in (
    select material
    from schema.material_table
    where old_material like '%55AD%'
  ) then 'Found'
  else 'Not Found'
end
from schema.material_table;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-24 02:01:18

我可以看到几个选择。最直接的翻译似乎是:

代码语言:javascript
复制
SELECT CASE
         WHEN m2.MATERIAL IS NOT NULL THEN 'Found'
         ELSE 'Not Found'
       END AS IZZIT_THERE
  FROM SCHEMA.MATERIAL_TABLE m2
  RIGHT OUTER JOIN SCHEMA.MATERIAL_TABLE m1
    ON m1.MATERIAL = m2.MATERIAL
  WHERE m1.OLD_MATERIAL LIKE '%55AD%'

但是RIGHT OUTER JOIN的使用可能是不熟悉的。为了切换到更熟悉的LEFT OUTER JOIN,我们需要反转查询中表的位置,并更改条件的显示方式:

代码语言:javascript
复制
SELECT CASE
         WHEN m1.MATERIAL IS NOT NULL THEN 'Found'
         ELSE 'Not Found'
       END AS IZZIT_THERE
  FROM SCHEMA.MATERIAL_TABLE m1
  LEFT OUTER JOIN SCHEMA.MATERIAL_TABLE m2
    ON m2.MATERIAL = m1.MATERIAL
  WHERE m1.OLD_MATERIAL LIKE '%55AD%'

我将别名保持不变,这样您就可以看到它们在查询中是如何移动的。在这两种查询中,m1都是主表,也就是说,它必须提供数据,而m2是次要或“可选”表--它可能有或可能没有匹配主表的数据。

就我个人而言,我更喜欢联接而不是子查询,因为我发现它们更容易理解,但是YMMV。

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

https://stackoverflow.com/questions/70089799

复制
相关文章

相似问题

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