微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用Slick中的subselect执行此SQL查询?

如何解决如何使用Slick中的subselect执行此SQL查询?

select
    *,(select count(1) from variants as v where v.product_id = p.id) as variants
from
    products as p
;

查询给出了我想要的结果,所以我现在只需要能够从Slick执行相同的操作即可。我有ProductVariant模型,并具有相应的ProductsVariants表,并分别设置了productsvariants TableQuery

这就是我最终得到的:

products.map(product =>
            (product,variants.filter(_.productId === product.id).length)
        ) map (_ <> (ProductAndVariantCount.tupled,ProductAndVariantCount.unapply))

解决方法

基本形式为:

products.map(row => 
  (row.id,row.otherColumnsHere,variants.filter(_.product_id === row.id).length)
)

我解决这些问题的方法是将查询的每个部分转换为Slick表达式,并查看它们如何组合。

您的情况是:

  • 子选择类似于table.filter(...).length
  • 主要选择是table.map(...)
  • 然后看看我是否可以使它们以某种方式组合。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。