使用Squeryl的select子句中的子查询

时间:2013-04-24 13:21:43

标签: postgresql scala squeryl

我正在尝试使用Squeryl复制以下查询。

SELECT c.order_number,p.customer,p.base,( 
  SELECT sum(quantity) FROM "Stock" s where s.base = p.base  
) as stock 
FROM "Card" c, "Part" p WHERE c."partId" = p."idField";

我有以下代码用于选择卡片和部件,但我看不到在select子句中添加sumation的方法。

from(cards, parts)((c,p) => 
where(c.partId === p.id)    
select(c,p)

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:3)

在Squeryl中,您可以在查询的from子句中使用任何Queryable对象。因此,要创建子查询,以下内容应该对您有用:

def subQuery = from(stock)(s => groupBy(s.base) compute(sum(s.quantity)))

from(cards, parts, subquery)((c, p, sq) =>
  where(c.partId === p.idField and sq.key === p.base)
  select(c.orderNumber, p.customer, sq.measures))

当然,字段名称可能略有不同,只是猜测类定义。如果您想要cardsparts的整个对象而不是原始查询中的单个字段,只需将select子句更改为:select(c, p, sq.measures)