Sql 具有多个连接的Rails中的高级查询
我有一桌人。我也有一个事件表;每个活动都有多个节目(,每个节目都有多张票,每张票可能有买家(一个人),也可能没有买家(一个人)。不过每个人都可以有多张不同活动的票 我当前的尝试如下所示:Sql 具有多个连接的Rails中的高级查询,sql,ruby-on-rails,activerecord,join,Sql,Ruby On Rails,Activerecord,Join,我有一桌人。我也有一个事件表;每个活动都有多个节目(,每个节目都有多张票,每张票可能有买家(一个人),也可能没有买家(一个人)。不过每个人都可以有多张不同活动的票 我当前的尝试如下所示: Person.joins(tickets: {shows: :events}).where("events.id" => 1) 并生成以下SQL: SELECT * FROM "people" INNER JOIN "tickets" ON "tickets"."buyer_id" =
Person.joins(tickets: {shows: :events}).where("events.id" => 1)
并生成以下SQL:
SELECT *
FROM "people"
INNER JOIN "tickets"
ON "tickets"."buyer_id" = "people"."id"
INNER JOIN "shows"
ON "shows"."id" = "tickets"."show_id"
INNER JOIN "events"
ON "events"."id" = "shows"."event_id"
WHERE
"events"."id" = 1;
但我的理解是,查询只会为每个人返回一张票证。我不太了解我的联接,但可以安全地假设我需要在人和票证之间有一个正确的外部联接,以便显示每个票证(从而表示每个事件).这是否正确?我如何在ActiveRecord/Arel中实现这一点
我如何找到所有拥有特定活动门票的人?我也不是DB专家,但据我所知,这就是它的工作方式:
Person.joins(票证:{show::event})
而不是
Person.joins(票证:{shows::events})
由于票证属于一个节目,而节目属于一个活动。我是否遗漏了什么?此查询将实际返回人员而不是票证。您能否澄清您的目标?我想找到所有拥有特定活动票证的人员。因此,我认为您的查询应该做到这一点。您是否期待不同的结果当一个人有多张票时?如果一个人有多张票,那么他们不是每行只返回一张票吗?这并不保证返回的票与我要查找的事件匹配。因此,如果一个人购买多个事件的票,如果查询返回,我很可能会错过这些票错误的票证。这就是为什么我认为我可能需要一个正确的外部联接。但不知道如何实现它。就是这样。我不希望人们会乘以票证数量,但这就是我所寻找的结果。查询正在工作,谢谢!