首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >联接中的优先级和括号。如何用反对的ORM写下面的SQL查询?

联接中的优先级和括号。如何用反对的ORM写下面的SQL查询?
EN

Stack Overflow用户
提问于 2022-01-12 11:38:36
回答 1查看 129关注 0票数 1

我有以下SQL查询:

代码语言:javascript
复制
select p.id, p.slug, p.post_author, b.id, b.is_deleted  from posts p 
left join blocks b 
on 
    ((b.blocked_id = p.post_author and blocker_id = <user id>)
    or 
    (b.blocked_id = <user_id> and b.blocker_id = p.post_author))
    and b.is_deleted = false
where b.id is null
order by posted_at  desc limit 20

需要一个相应的反对或声明,我不知道如何把这些括号放在首位。下面是我到目前为止作为修饰语所拥有的内容:

代码语言:javascript
复制
getUnblockedUsersPosts: (builder) => {
            builder.leftJoin('blocks as b', function(){
              this.on('b.blocked_id', '=', 'posts.post_author')
              .andOn('b.blocker_id', '=', parseInt(user.id))
              .orOn('b.blocked_id', '=', parseInt(user.id))
              .andOn('b.blocker_id', '=', 'posts.post_author')
              .andOn('b.is_deleted', knex.raw('false'))
            }).where('b.id', 'is', null)      
          },
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-12 13:02:34

因此,上面的查询是通过以下代码解决的,参考:https://knexjs.org/#Builder-join

代码语言:javascript
复制
getUnblockedUsersPosts: (builder) => {
            builder.leftJoin('blocks as b', function(){
              this.on(function(){
                this.on(function(){
                  this.on('b.blocked_id', '=', 'posts.post_author')
                  .andOn('b.blocker_id', '=', parseInt(user.id))
                })
                this.orOn(function(){
                  this.on('b.blocker_id', '=', 'posts.post_author')
                  .andOn('b.blocked_id', '=', parseInt(user.id))
                })
              })
              this.andOn('b.is_deleted', knex.raw('false'))
            }).where('b.id', 'is', null)      
          }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70680927

复制
相关文章

相似问题

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