如何将两个单独的查询合并/合并为一个?

时间:2019-03-04 11:47:24

标签: sql join coldfusion sybase coldfusion-11

我有一些旧代码,其中一个页面的查询速度非常慢。因为它们非常相似(几乎相同),所以引起了我的注意。唯一的区别是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 :(得分:0)

这不一定是最好的方法,但是它将回答您所问的问题,即如何通过单个查询实现相同的逻辑。

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>