Coldfusion: ВЫБРАТЬ ИЗ QoQ, ГДЕ X в (ВЫБРАТЬ Y ИЗ QoQ) не работает

В CF я пытаюсь сделать QoQ, где строки находятся в списке других строк. В основном перемещение некоторого кода из cftags в cfscript (не важно, почему). В тегах у нас есть основной запрос, и у нас есть несколько гнезд, которые делают некоторую тяжелую работу. Я перемещаю это в cfscript и имею следующий синтаксис, который работает:

var submissionList = new Query(dbtype="query", QoQsrcTable=ARGUMENTS.answers, sql="
SELECT submission_id FROM QoQsrcTable GROUP BY submission_id
").execute().getResult();
var submissions = new Query(dbtype="query", QoQsrcTable=ARGUMENTS.answers, sql="
    SELECT * FROM QoQsrcTable WHERE submission_id IN (#submissionList.submission_id#)
").execute().getResult();

Я пробовал следующее, но это не работает:

var submissions = new Query(dbtype="query", QoQsrcTable=ARGUMENTS.answers, sql="
    SELECT * FROM QoQsrcTable WHERE submission_id IN (SELECT submission_id FROM QoQsrcTable GROUP BY submission_id)
").execute().getResult();

Я думаю, что второй пример должен работать. Я пытался возиться с этим по-разному. Но не могу понять, что я делаю неправильно. Возможно, вложенный QoQ не работает так. Есть ли другой способ сделать то, что я пытаюсь, без двух частей кода? Просто так, что это более читабельно, и мне не нужно назначать переменные дважды.

2 ответа

QoQ не поддерживает подзапросы. Это длинное и короткое из этого.

Документы

В Coldfusion 10 или Railo 4 вы можете использовать функцию groupBy из Underscore.cfc, чтобы выполнить то, что вы хотите, в гораздо меньшем количестве кода:

_ = new Underscore();// instantiate the library    

submissions = _.groupBy(arguments.answers, 'submission_id');

groupBy() возвращает структуру, ключами которой являются значения элемента группы (в этом случае submission_id).

(Отказ от ответственности: я написал Underscore.cfc)

Другие вопросы по тегам