mysql - 查找具有特定值的所有关联的记录

标签 mysql sql ruby-on-rails postgresql associations

这更像是一个 SQL 问题,但我尝试在 Rails 中解决这个问题:

我有一个用户,他有_many :days。天数有一个状态,可以是可用已预订。我想找到所有只有可用天数 的用户。我使用:

User.includes(:days).where.not(days: { status: 'booked' }).references(:days)

生成的 SQL 查询如下所示:

SELECT * FROM "users" LEFT OUTER JOIN "days" ON "days"."user_id" = "users"."id" WHERE ("days"."status" != 'booked')

结果包含具有两种状态的用户。 感谢您提供解决此问题的任何想法!

最佳答案

I want to find all users who have only available days.

对于这类事情你应该使用joins :

User.joins(:days).where(days: { status: 'available' }).group('users.id')

生成的 SQL 看起来像这样:

SELECT users.* FROM users INNER JOIN days ON days.user_id = users.id WHERE days.status = available

编辑

如果我误解了你,状态既不是“已预订”也不是“可用”(但是,例如,可以是空白或nil),那么查询应该和你在 where.not 中的一样:

User.joins(:days).where.not(days: { status: 'booked' }).group('users.id')

编辑2

为了让用户有可用天数而没有预订天数,我可能会这样做:

User.joins(:days).where.not(days: { status: 'booked' }).where(days: { status: 'available' }).group('users.id')

关于mysql - 查找具有特定值的所有关联的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40001353/

相关文章:

mysql - 在一个查询中同时使用 select 和 count 函数从表中获取数据

python - 正则表达式匹配字符串中的 [ ^'] but also\'

SQL:long varchar 及其对性能的影响

ruby-on-rails - 使用 RSpec 在 Rails 中测试 View 助手

mysql - Rails 中不区分大小写的 group_by?

mysql - 为mysql中的唯一索引创建外键

PHP/MySQL 搜索查询返回空白表单

mysql - SQL查询根据两个不同表的条件更新一个表的列值

sql - 处理 SQLCMD :r in a post-deployment script

ruby-on-rails - 通过路由将参数传递给 Controller ​​ Action