#sql #subquery #elixir #ecto
Вопрос:
Это мой подзапрос (он всегда будет возвращать одну запись из-за предложения where):
subset =
from(a in "table1", where: a. id == ^parameter, select: [a.special_id1, a.special_id2, a.special_id3])
Это мой основной вопрос:
from(b in "table2", where: b.id in subquery(subset), select: [:first_name, :last_name]
Получение этой ошибки:
** (Ecto.QueryError) подзапрос должен возвращать одно поле, чтобы его можно было использовать в правой части
in
запроса:
Я понимаю, почему подзапрос вернет такую структуру [[special_id1, special_id2...]]
. Я хочу, чтобы подзапрос возвращал только плоский список. Как я могу этого достичь?
Ответ №1:
Ты не можешь. Однако вы можете использовать exists/1
запрос с подзапросом, который будет соответствовать родительскому полю:
subset =
from(a in "table1",
where: a.id == ^parameter,
where: parent_as(:table2).id in [a.special_id1, a.special_id2, a.special_id3],
select: 1)
from(b in "table2", as: :table2,
where: exists(subquery(subset)),
select: [:first_name, :last_name])
Это должно предоставить вам запрос, который вы ищете.