【问题标题】:Using COUNT For Comparison in SQL Server CE 4.0在 SQL Server CE 4.0 中使用 COUNT 进行比较
【发布时间】: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 子句来利用这种比较?

【问题讨论】:

    标签: c# count sql-server-ce sql-server-ce-4


    【解决方案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;
      

      【讨论】:

      • 我已更正原始查询。抱歉,我截断了一个更大的查询以取出相关部分,不小心把那个连接留在了那里。
      猜你喜欢
      • 2011-07-12
      • 2012-10-19
      • 1970-01-01
      • 2011-09-02
      • 2012-03-01
      • 1970-01-01
      • 2023-04-04
      • 2010-10-16
      • 2011-08-05
      相关资源
      最近更新 更多