首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Inner with if语句,组

Inner with if语句,组
EN

Stack Overflow用户
提问于 2011-05-28 10:38:07
回答 2查看 437关注 0票数 0

我这里有两组代码。这两组代码工作正常,没有错误。但是我面临一个问题,我需要将这两组代码组合在一起。请看一下,谢谢,这是我创建的第一个代码。

代码语言:javascript
复制
SELECT r.Name , r.Restaurant_ID, f.feature, r.Price_Range, r.Cuisine_ID, c.Cuisine,
    s.State_ID, s.State, l.Location_ID, l.Area, l.State_ID, r.Name, r.Location_ID
FROM Restaurants r, Bridge1_Restaurant_Features b, Features f, Cuisine c, State s, Location l
        where 0=0
        AND b.Feature_ID = f.Feature_ID 
        AND b.Restaurant_ID = r.Restaurant_ID
        AND r.Cuisine_ID = c.Cuisine_ID 
        AND r.Location_ID = l.Location_ID
        AND l.State_ID = s.State_ID
        <cfif ARGUMENTS.Feature_ID IS NOT "">
        AND f.Feature_ID IN (#ARGUMENTS.Feature_ID#)
        </cfif>
        <cfif ARGUMENTS.Price_Range IS NOT "">
        AND r.Price_Range IN (#ARGUMENTS.Price_Range#)
        </cfif>
        <cfif ARGUMENTS.Cuisine IS NOT "">
        AND r.Cuisine_ID = (#ARGUMENTS.Cuisine#)
        </cfif>
        <cfif val(ARGUMENTS.LocationID2) IS #val(ARGUMENTS.StateID)#>
        AND l.State_ID = #val(ARGUMENTS.LocationID2)#
        <cfelse>
            AND l.Location_ID = #val(ARGUMENTS.LocationID2)#
        </cfif>

然后,我注意到需要使用另一个逻辑来显示结果的feature_ID。代码如下所示

代码语言:javascript
复制
SELECT r.Restaurant_ID, r.Name, f.Feature
FROM   Restaurants r
INNER JOIN Bridge1_Restaurant_Features b ON b.Restaurant_ID = r.Restaurant_ID
INNER JOIN Features f ON b.Feature_ID = f.Feature_ID
INNER JOIN
(
     SELECT Restaurant_ID, COUNT(Feature_ID) AS FeatureCount
     FROM   Bridge1_Restaurant_Features
     <!--- find matching features --->
     WHERE  Feature_ID IN ( <cfqueryparam value="#ARGUMENTS.Feature_ID#" cfsqltype="cf_sql_integer" list="true"> )
    GROUP BY Restaurant_ID
    <!--- having ALL of the requested features --->
     HAVING COUNT(Feature_ID) = <cfqueryparam value="#listLen(ARGUMENTS.Feature_ID)#" cfsqltype="cf_sql_integer">
) ck ON ck.Restaurant_ID = r.Restaurant_Id

我想把这两组组合在一起。第二组必须替换

代码语言:javascript
复制
<cfif ARGUMENTS.Feature_ID IS NOT "">
    AND f.Feature_ID IN (#ARGUMENTS.Feature_ID#)
</cfif>

我尝试了几种方法来对这两个代码进行分组,但都失败了。我尝试的代码是在下面,它得到错误。

代码语言:javascript
复制
SELECT r.Name , r.Restaurant_ID, f.feature, r.Price_Range, r.Cuisine_ID, c.Cuisine,
        s.State_ID, s.State, l.Location_ID, l.Area, l.State_ID,  r.Location_ID
        FROM Restaurants r, Features f, Cuisine c, State s, Location l
        INNER JOIN Bridge1_Restaurant_Features b ON b.Restaurant_ID = r.Restaurant_ID
        INNER JOIN Features f ON b.Feature_ID = f.Feature_ID
        AND r.Cuisine_ID = c.Cuisine_ID 
        AND r.Location_ID = l.Location_ID
        AND l.State_ID = s.State_ID
        <cfif ARGUMENTS.Feature_ID IS NOT "">
        INNER JOIN
        (
             SELECT Restaurant_ID, COUNT(Feature_ID) AS FeatureCount
             FROM   Bridge1_Restaurant_Features
             <!--- find matching features --->
             WHERE  Feature_ID IN ( <cfqueryparam value="#ARGUMENTS.Feature_ID#" cfsqltype="cf_sql_integer" list="true"> )
            GROUP BY Restaurant_ID
            <!--- having ALL of the requested features --->
             HAVING COUNT(Feature_ID) = <cfqueryparam value="#listLen(ARGUMENTS.Feature_ID)#" cfsqltype="cf_sql_integer">
        ) ck ON ck.Restaurant_ID = r.Restaurant_Id
        </cfif>
        <cfif ARGUMENTS.Price_Range IS NOT "">
        AND r.Price_Range IN (#ARGUMENTS.Price_Range#)
        </cfif>
        <cfif ARGUMENTS.Cuisine IS NOT "">
        AND r.Cuisine_ID = (#ARGUMENTS.Cuisine#)
        </cfif>
        <cfif val(ARGUMENTS.LocationID2) IS #val(ARGUMENTS.StateID)#>
        AND l.State_ID = #val(ARGUMENTS.LocationID2)#
        <cfelse>
            AND l.Location_ID = #val(ARGUMENTS.LocationID2)#
        </cfif>
EN

回答 2

Stack Overflow用户

发布于 2011-05-28 11:52:45

我还是不知道你想要什么。

像这样的东西?

代码语言:javascript
复制
WITH group2 AS (

    SELECT r.Restaurant_ID, r.Name, f.Feature
    FROM   Restaurants r
    INNER JOIN Bridge1_Restaurant_Features b ON b.Restaurant_ID = r.Restaurant_ID
    INNER JOIN Features f ON b.Feature_ID = f.Feature_ID
    INNER JOIN
    (
         SELECT Restaurant_ID, COUNT(Feature_ID) AS FeatureCount
         FROM   Bridge1_Restaurant_Features
         <!--- find matching features --->
         WHERE  Feature_ID IN ( <cfqueryparam value="#ARGUMENTS.Feature_ID#"   cfsqltype="cf_sql_integer" list="true"> )
        GROUP BY Restaurant_ID
        <!--- having ALL of the requested features --->
         HAVING COUNT(Feature_ID) = <cfqueryparam value="#listLen(ARGUMENTS.Feature_ID)#" cfsqltype="cf_sql_integer">
        ) ck ON ck.Restaurant_ID = r.Restaurant_Id

)

SELECT r.Name , r.Restaurant_ID, f.feature, r.Price_Range, r.Cuisine_ID, c.Cuisine,
    s.State_ID, s.State, l.Location_ID, l.Area, l.State_ID, r.Name, r.Location_ID
FROM Restaurants r, Bridge1_Restaurant_Features b, Features f, Cuisine c, State s, Location l
    where 0=0
    AND b.Feature_ID = f.Feature_ID 
    AND b.Restaurant_ID = r.Restaurant_ID
    AND r.Cuisine_ID = c.Cuisine_ID 
    AND r.Location_ID = l.Location_ID
    AND l.State_ID = s.State_ID
    <cfif ARGUMENTS.Feature_ID IS NOT "">
    AND f.Feature_ID IN (group2.Restaurant_ID)
    </cfif>
    <cfif ARGUMENTS.Price_Range IS NOT "">
    AND r.Price_Range IN (#ARGUMENTS.Price_Range#)
    </cfif>
    <cfif ARGUMENTS.Cuisine IS NOT "">
    AND r.Cuisine_ID = (#ARGUMENTS.Cuisine#)
    </cfif>
    <cfif val(ARGUMENTS.LocationID2) IS #val(ARGUMENTS.StateID)#>
    AND l.State_ID = #val(ARGUMENTS.LocationID2)#
    <cfelse>
        AND l.Location_ID = #val(ARGUMENTS.LocationID2)#
    </cfif>
票数 0
EN

Stack Overflow用户

发布于 2011-05-30 22:13:54

我自己解决了这个问题。如果有任何可以改进的地方,请让我知道,谢谢大家。

代码语言:javascript
复制
SELECT r.Restaurant_ID, r.Name, f.Feature, r.Price_Range, r.Cuisine_ID, c.Cuisine,
                l.Location_ID, l.Area, s.State
        FROM   Restaurants r
        <cfif ARGUMENTS.Feature_ID IS NOT "">
        INNER JOIN
        (
             SELECT Restaurant_ID, COUNT(Feature_ID) AS FeatureCount
             FROM   Bridge1_Restaurant_Features
             <!--- find matching features --->
             WHERE  Feature_ID IN ( <cfqueryparam value="#ARGUMENTS.Feature_ID#" cfsqltype="cf_sql_integer" list="true"> )
            GROUP BY Restaurant_ID
            <!--- having ALL of the requested features --->
             HAVING COUNT(Feature_ID) = <cfqueryparam value="#listLen(ARGUMENTS.Feature_ID)#" cfsqltype="cf_sql_integer">
        ) ck ON ck.Restaurant_ID = r.Restaurant_Id
        </cfif>
        INNER JOIN Location l ON r.Location_ID = l.Location_ID
        INNER JOIN State s ON l.State_ID = s.State_ID
        INNER JOIN Cuisine c ON r.Cuisine_ID = c.Cuisine_ID 
        INNER JOIN Bridge1_Restaurant_Features b ON b.Restaurant_ID = r.Restaurant_ID
        INNER JOIN Features f ON b.Feature_ID = f.Feature_ID
        <cfif ARGUMENTS.Cuisine IS NOT "">
        AND r.Cuisine_ID = (#ARGUMENTS.Cuisine#)
        </cfif>
        <cfif ARGUMENTS.Price_Range IS NOT "">
        AND r.Price_Range IN (#ARGUMENTS.Price_Range#)
        </cfif>
        <cfif val(ARGUMENTS.LocationID2) IS #val(ARGUMENTS.StateID)#>
        AND l.State_ID = #val(ARGUMENTS.LocationID2)#
        <cfelse>
            AND l.Location_ID = #val(ARGUMENTS.LocationID2)#
        </cfif>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6159337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档