Возражение. js Как использовать внешние значения во внутреннем запросе? - PullRequest
0 голосов
/ 28 мая 2020

Я борюсь с несколько более сложным SQL запросом, который ДОЛЖЕН БЫТЬ в возражении. js. Ниже приведен код

const tagEntry = await Tag_overview.query()
    .where('playable') //the playable column is a boolean
    .whereExists(
        InnerTableName.query().findById([<normal variable>, tag.id]) //<= tag.id is the id of the row in the outer query
            )
    )
    .orderBy(raw('random()'))// this randomly orders the selection
    .limit(1)

«tag.id» должен быть значением строки в верхнем / внешнем запросе, который в настоящее время проверяется. В SQL я бы решил это простой строкой вроде ( - это переменная Javascript, переданная в запрос и может быть обработана как жестко запрограммированное значение, it и tagid являются составным ключом)

and EXISTS (SELECT tagid, othercolumn FROM kunstmakler_preselection WHERE tag.id = tagid AND <normal variable>  = othercolumn)

Но я совершенно не понимаю, как это сделать в возражении. js. Да, ему нужен внутренний запрос, но КАК мне передать туда этот tag.id? Я полностью потерялся, и ни Справочник по API, ни Книга рецептов не помогут (здесь: https://vincit.github.io/objection.js/recipes/)

Требуется ли здесь соединение? Оно того стоит? [Таблица tagoverview довольно мала, в то время как "InnerTableName" довольно велико]. Я чувствую, что это не может быть решением, поскольку в ülain SQL это был бы такой гладкий одинарный лайнер

1 Ответ

1 голос
/ 02 июня 2020

Сначала убедитесь, что вы правильно объявили составной ключ в модели InnerTableName https://vincit.github.io/objection.js/recipes/composite-keys.html

Тогда вы сможете сделать:

.whereExists(
  InnerTableName.query().findById([theJsVariable, ref("Tag_overview.id")])
)
...