如何在 Ecto 中进行子查询?
How to make subqueries in Ecto?
我有两张桌子;清单和投标。我想使用 Ecto 列出所有最高出价高于 1 且低于 10 的列表。有关架构和查询的更多信息,请参阅下面的代码。
数据库架构
listings
id
name
bids
listing_id
amount
program.ex
Repo.all(
from l in Listing,
where: (SELECT MAX(amount) FROM bids WHERE listing_id = l.id) > 1 and
(SELECT MAX(amount) FROM bids WHERE listing_id = l.id) < 10)
怎么办?
Ecto.Query.API.fragment/1
来救援:
join: l in Listing
where: fragment("
((SELECT MAX(amount) FROM bids WHERE listing_id = ?) > 1 and
(SELECT MAX(amount) FROM bids WHERE listing_id = ?) < 10)
", l.id, l.id)
作为 group_by
/ having
查询:
Repo.all(
from l in Listing,
join: b in assoc(l, :bids),
group_by: l.id,
having: (max(b.amount) > 1) and (max(b.amount) < 10)
select: l)
我有两张桌子;清单和投标。我想使用 Ecto 列出所有最高出价高于 1 且低于 10 的列表。有关架构和查询的更多信息,请参阅下面的代码。
数据库架构
listings
id
name
bids
listing_id
amount
program.ex
Repo.all(
from l in Listing,
where: (SELECT MAX(amount) FROM bids WHERE listing_id = l.id) > 1 and
(SELECT MAX(amount) FROM bids WHERE listing_id = l.id) < 10)
怎么办?
Ecto.Query.API.fragment/1
来救援:
join: l in Listing
where: fragment("
((SELECT MAX(amount) FROM bids WHERE listing_id = ?) > 1 and
(SELECT MAX(amount) FROM bids WHERE listing_id = ?) < 10)
", l.id, l.id)
作为 group_by
/ having
查询:
Repo.all(
from l in Listing,
join: b in assoc(l, :bids),
group_by: l.id,
having: (max(b.amount) > 1) and (max(b.amount) < 10)
select: l)