从SQL中的多个数据库中选择COUNT()
我正在尝试返回位于特定状态且已租用特定电影的客户数,其中租金表包含两列,一列用于客户ID,一列用于电影ID。该函数接受电影ID和状态,并返回一个包含客户数量的整数 现在我有一个实现,但它计算整个查询返回的行数:从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客户的正确数据。谢谢 首先,
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
)