ColdFusion зацикливается на запросе с помощью cfqueryparam

Я пытаюсь перебрать запрос с вложенным запросом. Код, который у меня есть до сих пор:

<cfloop query="hashTableLatest">
    <cfquery name="getDifferentImages" dbtype="query">
        SELECT image, imageHash
        FROM hashTable
        WHERE imageHash = <cfqueryparam cfsqltype="cf_sql_varchar" value="#hashTableLatest.imageHash#" />
    </cfquery>
</cfloop>

У меня проблема в том, что он не проходит динамически через cfqueryparam. Он просто получает первое значение из hashTableLatest. Может ли кто-нибудь сказать мне, что я делаю неправильно? Как я могу выполнить запрос и динамически изменить параметр cfqueryparam?

ОТРЕДАКТИРОВАНО Чтобы получить всю необходимую информацию в одном запросе:

select a.imageHash
from tblHashLatest a
WHERE a.imageHash in (SELECT c.imageHash
                  FROM tblHash c
              WHERE a.imageHash <> c.imageHash)

Я думаю, что приведенный выше SQL должен дать мне всю необходимую мне информацию. Результат, который я ищу, - получить все хэши изображений, которые не совпадают


person Roman    schedule 17.01.2014    source источник
comment
Ваш код правильный, и он должен делать то, что вы хотите. Что заставляет вас думать, что это не так? Использовали ли вы CFDUMP во внутреннем запросе, чтобы проверить: а) что он содержит; б) используемые SQL и параметры?   -  person Adam Cameron    schedule 17.01.2014
comment
Почему вы зацикливаетесь на запросе и выполняете другой запрос в этом цикле? Посмотрите на JOIN, и вы сможете сделать все это в одном запросе,   -  person Scott Stroz    schedule 17.01.2014


Ответы (1)


Есть несколько вариантов. Один из них - не использовать цикл, а просто сделать это:

WHERE imageHash in ( 
<cfqueryparam cfsqltype="cf_sql_varchar" 
value="#ValueList(hashTableLatest.imageHash)#" list="yes">
)
</cfquery

По возможности следует искать способы получить всю необходимую информацию из одного запроса.

person Dan Bracuk    schedule 17.01.2014
comment
Согласованный. Выполнение дополнительных вызовов CFQUERY в цикле первого результата CFQUERY почти всегда является неоптимальным подходом к требованию. - person Adam Cameron; 17.01.2014
comment
Использование JOIN было бы предпочтительнее, и это можно было бы сделать в одном запросе. - person Scott Stroz; 17.01.2014