【问题标题】:SQL Server Compact won't allow subselect but inner join with groupby not allowed on text datatypeSQL Server Compact 不允许子选择,但不允许在文本数据类型上使用 groupby 进行内部连接
【发布时间】:2012-04-23 21:29:40
【问题描述】:

我在数据库查询 (SQL Server) 中使用了以下 sql 语法

SELECT Nieuwsbrief.ID
    , Nieuwsbrief.Titel
    , Nieuwsbrief.Brief
    , Nieuwsbrief.NieuwsbriefTypeCode
    , (SELECT COUNT(*) AS Expr1 
        FROM NieuwsbriefCommentaar 
        WHERE (Nieuwsbrief.ID = NieuwsbriefCommentaar.NieuwsbriefID 
                AND NieuwsbriefCommentaar.Goedgekeurd = 1)) AS AantalCommentaren 
FROM Nieuwsbrief 

我现在正在更改为 sql-server-ce(精简版),它不允许我有这样的子查询。建议的解决方案:inner join。但是因为我只需要子表'NieuwsbriefCommentaar'的计数,我必须在我的基表属性上使用'group by'子句以避免结果集中出现双精度数。

但是,“Nieuwbrief.Brief”属性的数据类型为“text”。 sql-server-ce 中的“text”数据类型不允许使用 Group by 子句。 'Text' 数据类型已弃用,但 sql-server-ce 尚不支持 'nvarchar(max)'...

知道如何解决这个问题吗?谢谢你的帮助。

【问题讨论】:

    标签: sql group-by sql-server-ce inner-join subquery


    【解决方案1】:

    我认为解决方案可能更容易。我不确切知道您的元数据如何,但我认为此代码只需使用 LEFT JOIN 即可满足您的要求。

        SELECT Nieuwsbrief.ID 
        , Nieuwsbrief.Titel 
        , Nieuwsbrief.Brief 
        , Nieuwsbrief.NieuwsbriefTypeCode 
        , COUNT(NieuwsbriefCommentaar.NieuwsbriefID) AS AantalCommentaren
    FROM Nieuwsbrief  
    LEFT JOIN NieuwsbriefCommentaar  ON (Nieuwsbrief.ID = NieuwsbriefCommentaar.NieuwsbriefID)
    WHERE NieuwsbriefCommentaar.Goedgekeurd = 1
    

    编辑:第二个选项

    SELECT N.ID, N.Titel, N.Brief, N.NieuwsbriefTypeCode, G.AantalCommentaren  FROM Nieuwsbrief as N LEFT JOIN (SELECT NieuwsbriefID, COUNT(*) AS AantalCommentaren FROM NieuwsbriefCommentaar GROUP BY NieuwsbriefID) AS G ON (N.ID = G.NieuwsbriefID) 
    

    请让我知道此代码是否有效,以便找出另一种解决方法..

    问候,

    【讨论】:

    • 您好 Josemiguel,谢谢您的意见。但是,如果您计算子表 i.c. NieuwsbriefCommentaar.NieuwsbriefID,SELECT 子句的其他属性需要分组。 SQLce 引擎抛出错误:'在聚合和分组表达式中,SELECT 子句只能包含聚合和分组表达式 [Select 子句 = Nieuwsbrief,ID] 如果 sqlserverce 允许在 Nieuwsbrief 上添加 GROUP BY 子句,则不会有问题.Brief,但它不是数据类型“文本”。问候
    • 好的,所以试试:` SELECT N.ID, N.Titel, N.Brief, N.NieuwsbriefTypeCode FROM Nieuwsbrief as N LEFT JOIN (SELECT NieuwsbriefID, COUNT(*) AS AantalCommentaren FROM NieuwsbriefCommentaar GROUP BY NieuwsbriefID) AS G ON (N.ID = G.NieuwsbriefID)`
    • 此查询工作正常,但不包括结果集中的计数...?
    • Ups,对不起,我忘记了专栏,只是将 G.AantalCommentaren 添加为专栏。我要再修改一下。
    • 这确实是我想要的。非常感谢!
    猜你喜欢
    • 2018-10-13
    • 2012-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-25
    • 1970-01-01
    • 1970-01-01
    • 2011-04-08
    相关资源
    最近更新 更多