在 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