当前位置: 首页 > 面试题库 >

使用内部联接的Rails ActiveRecord查询

卫焕
2023-03-14
问题内容

我有两个要与之进行内部联接的表。

一个是users主键为的表id

另一个表是外键bars在哪里user_idbars也有一个列foo_id,其中wherefood_idfoos表的外键。

我正在尝试汇总一个ActiveRecord查询,在这里我可以选择N天前或之前创建的所有用户,并且foos其中任何bars.foo_id一个都没有等于特定ID的用户。我试图做这样的事情:

users = User.where("users.created_at <= ?", 50.days.ago).joins(:bars).where("bars.foo_id != 5")

此查询字段超过30,000个结果,这是不正确的,因为Users表仅具有12,000行。

我到底在做什么错?


问题答案:

您弄错了连接数学,并且产生了为每个用户+
foo组合创建行的效果。这是完全联接的工作方式。发生这种滑倒的原因是因为您实际上尚未将bars表加入到users表中。通常情况下,您必须加入条件,就像您的情况一样,bars.user_id=users.id是一个好主意。

话虽如此,您要做的是确定哪些用户符合条件,然后加载这些用户:

users = User.where('id IN (SELECT DISTINCT user_id FROM bars WHERE bars.foo_id!=?)', 5)

如果单独运行该子选择,则应该仅返回没有该特定foo的用户列表。使用此作为WHERE条件应仅加载那些用户。



 类似资料:
  • 我试图在一列内连接两个表。从数据库方面来看,没有映射,因为这是我不想讨论的事情。 我想使用内部联接执行HQL查询并检索角色对象/结果。 这是到目前为止我的hql 一场createQuery(“从角色作为角色内部加入参与作为角色上的参与。id=invention.roleid,其中invention.id=X”)。list(); 我看到在HQL上不可用。如何明确地告诉Hibernate仅加入此列。

  • 问题内容: 我有这个查询: 在访问时执行此查询时,出现“语法错误”。你有看错吗? 谢谢 问题答案: 您可以使用a来对更新查询中的其他表求和。具有聚合的子查询将无法工作,因为它们不可更新。

  • 我有一个使用TypeORM包与Postgres SQL交互的nestjs应用程序。 我有下面的代码, 对于键和用户实体,我需要将内部连接创建为 选择*FROM key INNER JOIN user ON key.id=user.“keyid”,其中user.“userid”=1; 如何使用typeorm编写等效的内部联接查询? 如何使用typeorm执行上面的SQL查询?

  • 问题内容: 我想在我的域/实体对象中执行以下操作: 这样我就可以在服务层中执行以下操作: 但是,我在HQL中的语法不正确-大约十分钟后,我决定放弃正式文档并在此处询问…?我的usercat表是这样加入的: 的SQL是这样,它在我的数据库命令提示符下工作正常: 仅仅是我还是休眠文档比较痛苦,您是否发现自己经常想知道,编写普通的jdbc准备好的语句来填充pojos / domain objects /

  • 所以我有一个相关的子查询,我读到这不是最有效的方法。因此,我想将此查询转换为内部联接查询。 我试过这样的方法: 在对数据库“db”执行SQL查询时导致 我在这里的所有搜索结果都产生了大致相同的查询(与我尝试的类似)

  • 问题内容: 我有这两张表 每天,无论交易/记录的数量如何,每个uid都将接收入和出的余额值 我想做的就是结合查询结果像这样 但是,当我执行此查询时 它产生无效的结果(SUM是两倍或三倍),我应该如何修改查询以使其不会产生两倍的结果? 问题答案: 首先建立总和,然后加入。像这样: 您拥有的方式,每一个都会与每个匹配项结合在一起,从而使数字相乘。您必须先进行汇总,然后再将 一个 总和与 一个 总和结合