我有两个要与之进行内部联接的表。
一个是users
主键为的表id
。
另一个表是外键bars
在哪里user_id
。bars
也有一个列foo_id
,其中wherefood_id
是foos
表的外键。
我正在尝试汇总一个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是两倍或三倍),我应该如何修改查询以使其不会产生两倍的结果? 问题答案: 首先建立总和,然后加入。像这样: 您拥有的方式,每一个都会与每个匹配项结合在一起,从而使数字相乘。您必须先进行汇总,然后再将 一个 总和与 一个 总和结合