我正在尝试我的第一次加入,它生成的 sql 非常奇怪。
我有一个收件人属于一个用户。我正在尝试查询所有未读取且未删除的用户的收件人:
scope :unread, where(:is_read => false).where(:is_deleted => false)
scope :unread_by_user_id, lambda { |id| unread.joins(:user).merge(User.by_id(id)) }
这是它生成的sql:
SELECT `recipients`.* FROM `recipients` INNER JOIN `users` ON `users`.`id` IS NULL WHERE `recipients`.`is_read` = 0 AND `recipients`.`is_deleted` = 0 AND `users`.`id` = 475
有什么办法可以摆脱“IS NULL”?那不应该在那里:(
我曾尝试在 google 上搜索,实际上 95% 的示例都没有谈论连接,这真的很神奇。我发现的几个连接示例使用了已被贬低的 & 语法。与其他内容相比,这方面的文档实际上非常糟糕。确实很奇怪。
无论如何,我无法让它工作。当您开发软件 19 年并且无法让 sql 加入单个表时,这绝对不是一个好日子 :( 我可以在 sql 中编写具有 15 个联接的查询,手动没有问题。我想这就是你付出的代价有时当你经历并学习新的框架时。虽然在 Hibernate 中这并不奇怪:/