【问题标题】:SQL: Nested Query Using 'AND NOT EXISTS' Syntax IssuesSQL:使用“AND NOT EXISTS”语法问题的嵌套查询
【发布时间】:2017-05-16 20:11:47
【问题描述】:

我正在尝试创建一个查询,向我显示在日期范围 1 中使用其帐户中的服务但在日期范围 2 中未使用其帐户中的服务的成员。

我使用“AND NOT EXISTS”创建了带有嵌套查询的查询,但我不断收到错误消息,我不知道原因。

SELECT        
    SS.memid
FROM
    SS 
INNER JOIN
    SSUSED ON SS.ssid = SSUSED.ssid 
INNER JOIN
    MEMBERS ON SS.memid = MEMBERS.memid 
INNER JOIN
    PRODUCTS ON SS.productid = PRODUCTS.productid 
INNER JOIN
    PRODUCTCATS ON PRODUCTS.productcatid = PRODUCTCATS.productcatid 
                AND NOT EXISTS (SELECT SS_1.memid
                                FROM SS AS SS_1  
                                INNER JOIN SSUSED AS SSUSED_1 ON SS_1.ssid = SSUSED_1.ssid 
                                INNER JOIN MEMBERS AS MEMBERS_1 ON SS_1.memid = MEMBERS_1.memid 
                                INNER JOIN PRODUCTS AS PRODUCTS_1 ON SS_1.productid = PRODUCTS_1.productid 
                                INNER JOIN PRODUCTCATS AS PRODUCTCATS_1 ON PRODUCTS_1.productcatid = PRODUCTCATS_1.productcatid
                                WHERE (SSUSED_1.usedate BETWEEN @rvStartWeek2 AND @rvEndWeek2) 
                                  AND (PRODUCTS_1.productcatid IN (27, 28, 29, 58, 77, 75, 30, 61, 31, 32, 47, 68)) 
                                  AND (MEMBERS_1.siteid = @rvSite)
                           )
WHERE        
    (SSUSED.usedate BETWEEN @rvStartWeek1 AND @rvEndWeek1) 
    AND (PRODUCTS.productcatid IN (27, 28, 29, 58, 77, 75, 30, 61, 31, 32, 47, 68)) 
    AND (MEMBERS.siteid = @rvSite)

我得到的错误如下:

【问题讨论】:

  • 您的错误消息表明您无权访问用作参数的 CLR 类型。我不确定这与您的查询有什么关系。

标签: sql sql-server sql-server-2008 ssrs-2008


【解决方案1】:

也许,问题是主查询没有链接到不存在的子查询。 试试看:

为所有表创建别名,而不是仅在子查询上 在子查询的“where”上加入主查询

    SELECT        
    SS_0.memid
FROM
    SS SS_0
INNER JOIN
    SSUSED SSUSED_0 ON SS_0.ssid = SSUSED_0.ssid 
INNER JOIN
    MEMBERS MEMBERS_0 ON SS_0.memid = MEMBERS_0.memid 
INNER JOIN
    PRODUCTS PRODUCTS_0 ON SS_0.productid = PRODUCTS_0.productid 
INNER JOIN
    PRODUCTCATS PRODUCTCATS_0 ON PRODUCTS.productcatid = PRODUCTCATS.productcatid 
                AND NOT EXISTS (SELECT SS_1.memid
                                FROM SS AS SS_1  
                                INNER JOIN SSUSED AS SSUSED_1 ON SS_1.ssid = SSUSED_1.ssid 
                                INNER JOIN MEMBERS AS MEMBERS_1 ON SS_1.memid = MEMBERS_1.memid 
                                INNER JOIN PRODUCTS AS PRODUCTS_1 ON SS_1.productid = PRODUCTS_1.productid 
                                INNER JOIN PRODUCTCATS AS PRODUCTCATS_1 ON PRODUCTS_1.productcatid = PRODUCTCATS_1.productcatid
                                WHERE (SSUSED_1.usedate BETWEEN @rvStartWeek2 AND @rvEndWeek2) 
                                  AND (PRODUCTS_1.productcatid IN (27, 28, 29, 58, 77, 75, 30, 61, 31, 32, 47, 68)) 
                                  AND (MEMBERS_1.siteid = @rvSite)
                                  AND (SS_0.memid = SS_1.memid) -- Joint main Query and Subquery
                           )
WHERE        
    (SSUSED_0.usedate BETWEEN @rvStartWeek1 AND @rvEndWeek1) 
    AND (PRODUCTS_0.productcatid IN (27, 28, 29, 58, 77, 75, 30, 61, 31, 32, 47, 68)) 
    AND (MEMBERS_0.siteid = @rvSite)

【讨论】:

    猜你喜欢
    • 2013-02-13
    • 1970-01-01
    • 1970-01-01
    • 2021-03-02
    • 1970-01-01
    • 2016-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多