【发布时间】:2019-04-04 19:39:41
【问题描述】:
我正在尝试在scala Active record 中编写特定查询。但它总是什么都不返回。我已经阅读了 github 页面上的 wiki,但它并没有包含很多信息。我要写的查询是
SELECT e.name, e.id, COUNT(pt.pass_id) as pass_count, e.start_date, e.total_passes_to_offer
FROM events e inner join passes p on e.id = p.event_id inner join pass_tickets pt on p.id = pt.pass_id where e.partner_id = 198 group by e.name, e.id
我试过的是
Event.joins[Pass, PassTicket](
(event, pass, passTicket) => (event.id === pass.eventId, pass.id === passTicket.passId)
).where(
(event, _, _) => event.partnerId === partnerId
).select(
(event, pass, _) => (event.name, event.id, PassTicket.where(_.passId === pass.id).count, event.startDate, event.totalPassesToOffer)
).groupBy( data => data._2)
但是首先,返回类型变成了一个映射,而不是一个列表。其次,在执行时,即使数据存在,它也不会返回任何内容。直接对数据库运行 SQL 查询时,会返回预期的结果。
【问题讨论】:
-
请在代码问题中给出minimal reproducible example--剪切&粘贴&可运行代码加上所需的输出加上清晰的规范和解释。缺少一个是关闭的理由。不幸的是,赏金系统的一个缺陷是无法关闭具有开放赏金的问题。但为了最大限度地提高您获得有用答案的机会,请相应地进行编辑。 PS既然你没有得到你所期望的,“SQL 执行得很好”是什么意思? PS什么github页面?
-
我会尝试将这部分替换为
passTicket忽略(event, pass, _) => (event.name, event.id, PassTicket.where(_.passId === pass.id).count, event.startDate, event.totalPassesToOffer)与实际参考,类似这样的(event, pass, passTicket) => (event.name, event.id, passTicket.where(_.passId === pass.id).count, event.startDate, event.totalPassesToOffer)。我不知道这是否是正确的语法,这就是我发表评论而不是答案的原因。 -
@Shikkou 说“passTicket”只是一个表结构。所以你不能在上面调用方法。
标签: scala join activerecord group-by