gpt4 book ai didi

mysql - ActiveRecord 在我的代码未指定的列上添加 DISTINCT

转载 作者:行者123 更新时间:2023-11-30 22:33:25 25 4
gpt4 key购买 nike

我的一个 Client 模型上有下面的代码片段:

has_many :roles
has_many :cases, :through => :roles

在数据库中,存在三 (3) 个角色:

id | role | case_id | client_id
1 | 1 | 50 | 60
2 | 2 | 50 | 60
3 | 3 | 50 | 60

记录几乎相同,但是每行的角色列不同。

ActiveRecord 查询 Client.includes(:cases).where(cases: { id: 1459 }) 生成下面的查询,它添加了一个 DISTINCT 导致它只从数据库中获取一行:

SELECT COUNT(DISTINCT `clients`.`id`) FROM `clients` LEFT OUTER JOIN `roles` ON `roles`.`client_id` = `clients`.`id` AND `roles`.`deleted_at` IS NULL LEFT OUTER JOIN `cases` ON `cases`.`id` = `roles`.`case_id` AND `cases`.`deleted_at` IS NULL WHERE `clients`.`deleted_at` IS NULL AND `cases`.`id` = 1459

我如何与 ActiveRecord 通信以不包含 DISTINCT clients.id 片段?

最佳答案

include 方法将在 has_many 关系(外键)上生成一个不同的计数查询。使用 Client.joins(:cases).where(cases: { id: 1459 }) 避免在查询中添加 DISTINCT。

您的查询现在应该是

SELECT COUNT(*) FROM `clients` INNER JOIN `roles`
ON `roles`.`client_id` = `clients`.`id` AND
`roles`.`deleted_at` IS NULL LEFT OUTER JOIN
`cases` ON `cases`.`id` = `roles`.`case_id`
AND `cases`.`deleted_at` IS NULL
WHERE `clients`.`deleted_at` IS NULL
AND `cases`.`id` = 1459

关于mysql - ActiveRecord 在我的代码未指定的列上添加 DISTINCT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33224254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com