首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >SQL有宏吗?(特别是Presto风格的SQL)

SQL有宏吗?(特别是Presto风格的SQL)
EN

Stack Overflow用户
提问于 2018-11-30 16:56:42
回答 1查看 1.7K关注 0票数 0

我对SQL比较陌生,我发现自己很想在SQL中使用宏。

考虑:

代码语言:javascript
代码运行次数:0
运行
复制
SELECT
  session_id,
  user_id,
  hitnumber,
  IF(
    eventinfo.eventcategory = 'search' AND eventinfo.eventaction = 'RunSearch',
    TRUE, FALSE
  ) issued_search,
FROM google_analytics.hits
JOIN (
  SELECT
    session_id
  FROM google_analytics.hits
  WHERE eventinfo.eventcategory = 'search' AND eventinfo.eventaction = 'RunSearch'
  GROUP BY session_id
) sessions_with_search ON hits.session_id = sessions_with_search.session_id

请注意,eventinfo.eventcategory = 'search' AND eventinfo.eventaction = 'RunSearch'在查询中重复了两次。此子句表示属于搜索行的行。不久,我将扩展搜索行的概念,以包括一个非常长的或‘ed子句列表,这些子句如下所示。我不想在两个地方重复。此外,我认为在两个地方重复相同的SQL是一个很好的bug源--我可能会在没有考虑的情况下改变一个地方而不是另一个地方。

我想要一个宏观的概念,但据我所知,它们并不存在。我希望能够在查询的上面指定这一点

SEARCH_HIT=`eventinfo.eventcategory = 'search' AND eventinfo.eventaction = 'RunSearch'`

然后,上面的查询将变成:

代码语言:javascript
代码运行次数:0
运行
复制
SELECT
  session_id,
  user_id,
  hitnumber,
  IF(@SEARCH_HIT, TRUE, FALSE) issued_search,
FROM google_analytics.hits
JOIN (
  SELECT
    session_id
  FROM google_analytics.hits
  WHERE @SEARCH_HIT
  GROUP BY session_id
) sessions_with_search ON hits.session_id = sessions_with_search.session_id

查询已经更清晰了,但是想象一下,当@SEARCH_HIT为20个子句时,宏的查询更加清晰和可维护。

问题

  1. SQL宏是否存在于任何IDE中?
  2. SQL宏是否存在于任何SQL语言中?
  3. 在任何Presto SQL中是否存在SQL宏?
  4. 如果宏不存在,为什么不存在?为了提高查询的可维护性,我们应该用什么替换它们呢?
EN

回答 1

Stack Overflow用户

发布于 2018-11-30 17:28:09

您正在描述动态sql。SQL引擎不将变量解释为可执行代码。有很多关于如何逐字符串构造查询字符串的文章。

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

https://stackoverflow.com/questions/53561809

复制
相关文章

相似问题

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