从SQL中的多个数据库中选择COUNT()

从SQL中的多个数据库中选择COUNT(),sql,select,count,aggregate,Sql,Select,Count,Aggregate,我正在尝试返回位于特定状态且已租用特定电影的客户数,其中租金表包含两列,一列用于客户ID,一列用于电影ID。该函数接受电影ID和状态,并返回一个包含客户数量的整数 现在我有一个实现,但它计算整个查询返回的行数: SELECT COUNT(*) as numCustomers FROM CUSTOMER C, RENTS R WHERE C.ST = '" + state + "' AND R.mid = " + movieID 然后我计算行数。我只想能够检查NUMC客户的正确数据。谢谢 首先,

我正在尝试返回位于特定状态且已租用特定电影的客户数,其中租金表包含两列,一列用于客户ID,一列用于电影ID。该函数接受电影ID和状态,并返回一个包含客户数量的整数

现在我有一个实现,但它计算整个查询返回的行数:

SELECT COUNT(*) as numCustomers FROM CUSTOMER C, RENTS R WHERE C.ST = '" + state + "' AND R.mid = " + movieID

然后我计算行数。我只想能够检查NUMC客户的正确数据。谢谢

首先,您缺少在CustomerId上链接租金表和客户表的子句

其次,应该使用FROM子句中的内部联接功能来添加两个表

第三,您不应该像这样将sql构建为字符串,因为您将对sql注入开放

据猜测,您可能追求的SQL类型如下所示

DECLARE @movieId int
DECLARE @state varchar(2)

SET @movieId = 12345
SET @state = 'NY'

SELECT
    COUNT(DISTINCT C.CustomerID) as numCustomers
FROM
    CUSTOMER C
INNER JOIN
    RENTS R
ON
    C.CustomerID = R.CustomerId
WHERE
    C.ST = @state
AND
    R.mid = @movieId

猜测您的模式(租金与客户的关系):


此外,如果您对SQL注入攻击还不熟悉,那么您应该研究SQL注入攻击。

您必须连接客户表和租赁表,否则每个表中的每个条目都会有一个条目

那么:
选择COUNT(C.ID)作为numCustomers
来自客户C,租金R
其中
C.ID=R.RenterID
C.ST='“+state+”
R.mid=“+movieID

SELECT COUNT(*) as numCustomers
FROM CUSTOMER c
WHERE
    c.ST = @State
    AND EXISTS
    (
        SELECT *
        FROM RENTS r
        WHERE r.CustomerID = c.CustomerID
        AND r.mid = @movieID
    )