Как объединить / объединить два отдельных запроса в один? - PullRequest
0 голосов
/ 04 марта 2019

У меня есть старый код с очень медленными запросами на одной из страниц.Есть два, которые привлекли мое внимание, так как они очень похожи (почти идентичны).Единственная разница - одна строка в WHERE CLAUSE.Вот пример:

-- Query 1
SELECT * -- Just for testing purpose I use * 
FROM Table 1
WHERE rec_id = #selected_id#
   <cfif userid is not "6">
       AND store_id = '#url.storedid#' -- I do not use cfqueryparam for testing purpuse
   </cfif>

-- Query 2
SELECT * -- Just for testing purpose I use * 
FROM Table 1
WHERE rec_id = #selected_id#
   <cfif userid is not "6">
       <cfif session.market_id is 4>
           AND store_id IN ('01','02','03')
       <cfelse>
           AND store_id = '#url.storedid#'
       </cfif>
   </cfif>

Как видите, единственное различие между этими двумя запросами заключается в предложении WHERE внутри блока cfif.Мне было интересно, если есть способ объединить эти два запроса в один?Единственный столбец, который используется два, проверяет разницу между двумя результирующими наборами - это TOTAL столбец.Если у кого-то есть представление о том, как этого можно достичь, пожалуйста, дайте мне знать.Спасибо.

1 Ответ

0 голосов
/ 04 марта 2019

Это не обязательно лучший подход, но он ответит на заданный вами вопрос о том, как добиться той же логики с помощью одного запроса.

SELECT * -- Just for testing purpose I use * 
FROM Table 1
WHERE rec_id = #selected_id#
   <cfif userid is not "6" and session.market_id is 4>
           AND store_id IN ('01','02','03')
       <cfelseif userid is not "6">
           AND store_id = '#url.storedid#'    
   </cfif>

Имейте в виду, что этот подход немного отличаетсялогика, потому что есть только одна переменная запроса.Комментарии предполагают, что вам могут понадобиться две переменные, и в этом случае этот подход будет работать.

Query1 - первая в вашем вопросе.

<cfif userid is not "6" and session.market_id is 4>
<cfquery name = Query2 dbtype="query">
select *
from Query1
where store_id IN ('01','02','03')
</cfquery>
<cfelse>
<cfset Query2 = Query1>
</cfif>
...