【问题标题】:Joining other results from same table mysql knex加入来自同一个表 mysql knex 的其他结果
【发布时间】:2018-05-03 06:37:41
【问题描述】:

我想从同一个表中获取与event_ids 匹配的其他user_ids。我已经尝试在leftJoin 和outerLeftJoin 中使用子查询和this.on 函数。无法使用以下代码解决“非唯一表/别名”错误。

knex('user_2_event')
            .select(
                'event.*',
                'user_2_event.user_id as main_user_id'
            )
            .where('user_2_event.user_id',17)
            .join('event', 'event.event_id', 'user_2_event.event_id')
            .leftOuterJoin('user_2_event', function(){
                this.on('user_2_event.event_id', '=', 'event.event_id') 
            })

或者这个而不是上面的leftOuterJoin,这会产生“我的语法错误”。

            .join(
                knex('user_2_event')
                .select('user_2_event.user_id as other_user')
                .where('user_2_event.event', '=','event.event_id')
            )

【问题讨论】:

  • 嗨。 “与 event_ids 匹配的同一表中的其他 user_ids”不清楚。使用足够的句子和短语来清楚地表达你的意思。请阅读minimal reproducible example 并采取行动。找到显示您的问题的最小代码涉及首先减少到没有问题的最大代码 - 查看将您带到 MCVE 的附加代码。哪个应该包括您的确切错误消息。另外——请阅读How to Ask 和向下投票箭头鼠标悬停文本。在这里,谷歌你的错误消息有&没有你的特定字符串/名称。阅读每个操作员的手册。
  • 在我的方法中找出问题所在真的有那么难吗?显然,我的经验不足意味着我的措辞会有些糟糕。如果我更有经验,那么我可能会知道基础知识。论坛、互联网和通信的存在是为了更有效地交换信息,因此当一个人的 3 分钟可以节省另一个人的时间时,不需要重新发明轮子或“阅读所有内容的手册”。幸运的是,我认识的人建议为表格使用别名,我不知道这是可能的。也许你可以说,但没有
  • 我只是没有碰巧看到这个问题。我为什么要?其他 14 人也没有。而编译器是旨在发现此类问题的程序。 Bur您没有提供运行代码所需的代码。您没有给出您已经拥有的编译器错误消息。但是,我确实给了您建议,以帮助您获得更多帮助。然而你抱怨。当您不愿意并且正在浪费他们的时间时,为什么人们要花费他们的时间? (修辞。)meta.stackoverflow.com/q/333952/3404097
  • PS 如果您根据我的 cmets 和链接编辑您的问题,那么人们可能会支持它。此外,如果您在可能的情况下接受您的答案,它会告诉其他人您找到了解决方案。而且,如果您对其进行编辑以改进它,以便向 google 人清楚地解释发现您的问题的“使用别名”背后的想法,那么您的答案也可能会得到支持。
  • 感谢您的指点,我可能会回到它,在优先事项前进的那一刻。我看了看,可能需要一点时间才能理解我到底需要什么。我真的认为这个例子,特别是与原始帖子相比,足以清楚地说明变化是什么。赞成票,反对票,我不知道,这是一种痴迷。那些投反对票的人有一种触发快乐的势利(不是说你本身,但这是SO的感觉,而不仅仅是在我看来),而那些寻求解决方案的人实际上需要一点时间来看看问题和解决方案是相关的。

标签: mysql join outer-join knex.js


【解决方案1】:

在以各种方式搜索有关在同一张表上以不同方式获取数据的指导之后(但有人用技术术语表示),有人建议我在同一张表上使用别名。瞧,快速简单,无需担心连接函数和子查询。

knex('user_2_event as e1')
            .select(
                'event.*',
                'e1.user_id as user_id',
                'e2.user_id as other_id'
            )
            .where('e1.user_id',17)
            .join('event', 'event.event_id', 'e1.event_id')
            .leftJoin('user_2_event as e2', 'e2.event_id', 'event.event_id')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-06
    • 2013-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多