在 SQL Server CE 4.0 中使用 COUNT 进行比较

Posted

技术标签:

【中文标题】在 SQL Server CE 4.0 中使用 COUNT 进行比较【英文标题】:Using COUNT For Comparison in SQL Server CE 4.0 【发布时间】:2014-04-17 17:19:37 【问题描述】:

我正在尝试组合我的一些 SQL 查询的逻辑,但我似乎无法弄清楚这个问题。显然 SQL Server CE 与 SQL Server 或 mysql 相比有很多限制,但肯定有办法解决这个问题。

我想根据一些参数对我的数据库中的一个表进行计数,然后我想将此值与存储在另一个表的列中的值进行比较。

假设数据库是这样建模的:

Table1:

ID int
Key string
NumberInUse int

Table2:

ID int
OtherID int

这是查询的必要部分。

SELECT * 
FROM Table1 
LEFT JOIN Table2 ON Table1.ID = Table2.ID
WHERE Table1.Key = @key
AND (SELECT COUNT(*) FROM Table2 WHERE ID = Table1.ID AND OtherID = @otherID) < Table1.NumberInUse;

不幸的是,这个查询给了我这个错误:

解析查询时出错。 [令牌行号=4,令牌行偏移量=6,错误令牌=SELECT]`

那么有没有办法可以改写我的查询的WHERE 子句来利用这种比较?

【问题讨论】:

【参考方案1】:

试试这个:

SELECT * 
FROM Table1 t1
INNER JOIN (SELECT ID
                  ,COUNT(*) numCount
              FROM Table2 t2
             WHERE t2.OtherId = @otherID
             GROUP BY ID) t3
   ON t1.ID = t3.ID
 WHERE t1.Key = @Key
   AND t3.numCount < t1.NumberInUse

【讨论】:

【参考方案2】:

当然不是 SQL。您缺少第二个 LEFT JOIN 的正确操作数:

SELECT *
FROM Table1 LEFT JOIN Table2
    ON Table1.ID = Table2.ID
    LEFT JOIN ????? WHUT ?????
WHERE Table1.Key = @key
AND (SELECT COUNT(*) FROM Table2 WHERE ID = Table1.ID AND OtherID = @otherID) < Table1.NumberInUse;

【讨论】:

我已更正原始查询。抱歉,我截断了一个更大的查询以取出相关部分,不小心把那个连接留在了那里。

以上是关于在 SQL Server CE 4.0 中使用 COUNT 进行比较的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL Server CE 4.0 中使用 COUNT 进行比较

无法在 Visual Studio 2012 的 asp.net 中使用 sql server ce 4.0

SQL Server CE 4.0 本地缓存代理?!英孚支持?

将 SQL Server CE 数据库 (.sdf) 从 3.5 更新到 4.0

如何让实体数据模型与 SQL Server CE 4.0 一起使用?

无法使用 SQL Server CE 4.0